c++类中系统默认拷贝构造函数的解析

我们在定义了一个c++类后, 如果我们自己没有写拷贝构造函数 , 那么系统就会系统一个默认的拷贝构造函数 , 但如果我们类中存在指针等地址变量时 , 就会发生意想不到的结构:

代码1、调用系统拷贝构造函数:

#include <iostream>
#include <stdio.h>
using namespace std;

class point
{
public:
    point()  {}
    point(string *c)  { z = c;}
    void set2();
    string get();

private:
    string *z;

};


string point::get()
{
    return z[0];
}
void point::set2()
{
    z[0] = "xy";
} 

int main()
{
    string xy[3] = {"wef" , "efe" , "wre"};
    point a(xy);
    point b(a);
    a.set2();
    cout << a.get() << endl;
    cout << b.get() << endl;
    return 0;
}
输出的结果是:

c++类中系统默认拷贝构造函数的解析


代码2、调用自定义的拷贝构造函数:#include <iostream>

#include <iostream>
#include <stdio.h>
using namespace std;

class point
{
public:
    point()  {}
    point(const point &c , int new_size);
    point(string *c)  {z = c;}
    void set2();
    string get();

private:
    string *z;

};


string point::get()
{
    return z[0];
}
void point::set2()
{
    z[0] = "xy";
}
point::point(const point &c , int new_size)
{
    z = new string[new_size];
    for(int i = 0; i < new_size; i++)
        z[i] = c.z[i];
}
int main()
{
    string xy[3] = {"wef" , "efe" , "wre"};
    point a(xy);
    point b(a , 3);
    a.set2();
    cout << a.get() << endl;
    cout << b.get() << endl;
    return 0;
}
输出结果是:

c++类中系统默认拷贝构造函数的解析

c++类中系统默认拷贝构造函数的解析,布布扣,bubuko.com

c++类中系统默认拷贝构造函数的解析

上一篇:转:JAVA类加载器


下一篇:c语言向文件中写入