如何在C ++中复制类?

时间:2019-01-22 21:40:06

标签: c++

假设我上了A

class A{
public:
    A(const A&) {};
    A() {};
    ~A() {};
    bool bln; 
    B b;
}

如果我写

A *a2;
a2 = new A(*a);

其中aA对象,那么a2->b似乎与a->b不同。

如何将a准确复制到a2

1 个答案:

答案 0 :(得分:1)

bln尚未在A的任何构造函数中初始化。 b仅在两个构造函数中都是默认构造,而在复制构造函数中根本不被复制。

尝试一下:

class A
{
public:
    bool bln; 
    B b;

    A() : bln(false) {}
    A(const A &src) : bln(src.bln), b(src.b) {}
};

更好的选择是让编译器为您生成一个默认的副本构造函数,该副本构造函数实际上与上面的相同:

class A
{
public:
    bool bln;
    B b;

    A() : bln(false) {}
};

或者,在C ++ 11和更高版本中,您可以使用:

class A
{
public:
    bool bln = false;
    B b;

    // these are optional in this case and can be omitted
    A() = default;
    A(const A&) = default;
};