Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/124.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在C++中复制类?_C++ - Fatal编程技术网

如何在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;
};