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

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

#include 
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"<%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;
}

关键总结:

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

你可能感兴趣的:(C++构造函数,析构函数,拷贝构造函数初识)