如何在C++中复制类?
假设我有甲级 如果我写如何在C++中复制类?,c++,C++,假设我有甲级 如果我写 A *a2; a2 = new A(*a); 如果a是a对象,那么a2->b与a->b似乎不同 如何将a精确复制到a2?bln未在a的任何构造函数中初始化。b只在两个构造函数中都是默认构造的,在复制构造函数中根本没有被复制 试试这个: class A { public: bool bln; B b; A() : bln(false) {} A(const A &src) : bln(src.bln), b(src.b) {}
A *a2;
a2 = new A(*a);
如果a是a对象,那么a2->b与a->b似乎不同
如何将a精确复制到a2?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;
};
您是在实现此类还是在使用某些任意类模板?此外,提供的代码段显示未定义的行为。这可能更适合作为结构。听起来您可以使用“我在实现此类时”“a”是一个“a”对象,我会将其内容复制到另一个对象“a2”中。为什么我需要初始化bln?@Alessandro,否则它将有一个不确定的值。简单的POD类型,比如bool,没有默认值,特别是当用作类成员时。您必须显式地初始化它们。
class A
{
public:
bool bln = false;
B b;
// these are optional in this case and can be omitted
A() = default;
A(const A&) = default;
};