假设我上了A
类
class A{
public:
A(const A&) {};
A() {};
~A() {};
bool bln;
B b;
}
如果我写
A *a2;
a2 = new A(*a);
其中a
是A
对象,那么a2->b
似乎与a->b
不同。
如何将a
准确复制到a2
?
答案 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;
};