C++构造函数,析构函数,拷贝构造函数初识

//
//  main.cpp
//  拷贝构造函数
//
//  Created by Eric on 16/7/20.
//  Copyright © 2016年 Eric. All rights reserved.
//

#include <iostream>
using namespace std;

/**
 *  3.拷贝构造函数调用的三种形式
 3.1.一个对象作为函数参数,以值传递的方式传入函数体;
 3.2.一个对象作为函数返回值,以值传递的方式从函数返回; 
 3.3.一个对象用于给另外一个对象进行初始化(常称为复制初始化)。
 */

/**
 *  当产生新对象,用已有对象去初始化新对象时才会调用拷贝构造函数
 */

class Location
{
public:
    /**
     *  含参构造函数
     */
    Location(int x = 0,int y = 0){
        _x = x;
        _y = y;
        _myP = (char *)malloc(100);
        strcpy(_myP, "adfadaf");
        
        cout<<"Constructor Object.\n";
    }
    Location(const Location &obj){
        cout<<"调用拷贝构造函数 \n";
    }
    /**
     *  析构函数
     */
    ~Location(){
        cout<<_x<<","<<"Object destroryed"<<endl;
        if (_myP != NULL) {
            free(_myP);
        }
    }
    
    int getX(){
        return _x;
    }
private:
    int _x,_y;
    
    char *_myP;
};

class A{
    A(int a){
        _a = a;
    };
private:
    int _a;
};


Location createLocation(){
    
    Location L(10,20);
    printf("---->%p\n",&L);
    return L;
}

void testFunction(){
    createLocation();
}

void testFunction2(){
    Location a = createLocation();
    printf("---->%p\n",&a);
    printf("对象被扶正:m:%d\n",a.getX());
}
void testFunction3(){
    Location B(5,2);
    //
    Location C = B;
    printf("C:m:%d\n",C.getX());
}
void testFunction4(){
    Location B(5,2);
    //
    Location C(19,20);
    C = B;
    printf("C:m:%d\n",C.getX());
}
int main(int argc, const char * argv[]) {
    // insert code here...
    std::cout << "Hello, World!\n";
    
//    testFunction();
//    testFunction2();
//    testFunction3();//内存泄露  显示的调用了内存拷贝函数 
      testFunction4();//内存泄露   隐式的调用了内存拷贝函数
//    
//    Location D;
//    
//    D = B;
    
    return 0;
}

关键总结:

当产生新对象,用已有对象去初始化新对象时才会调用拷贝构造函数

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 前言 把《C++ Primer》[https://book.douban.com/subject/25708312...
    尤汐Yogy阅读 13,154评论 1 51
  • 写在前面:感谢GeekBand提供这样好的学习机会,让我在繁忙的工作之余可以学习巩固c++知识。以下是边学边记的一...
    PatrickHC阅读 3,173评论 0 0
  • C++文件 例:从文件income. in中读入收入直到文件结束,并将收入和税金输出到文件tax. out。 检查...
    SeanC52111阅读 8,044评论 0 3
  • 什么叫天无绝人之路?今天,原本想请高手帮忙和面,结果,高手很忙,没空!只能我这种菜鸟赶鸭子上架,硬着头皮自...
    蒲公英fl阅读 3,064评论 0 1
  • “这个瓶子画于2016年的瞬间,所以多好,留下点东西。” 在职场经常会听到有些资历深厚的“老人”会说...
    落在地上的原野阅读 3,468评论 3 1

友情链接更多精彩内容