c++ - 创建一个易于维护的复制构造函数

标签 c++ constructor deep-copy

考虑以下类:

class A {

char *p;
int a, b, c, d;

public:
   A(const &A);
};

请注意,我必须定义一个复制构造函数才能对“p”进行深层复制。这有两个问题:

  1. 应该简单地复制大部分字段。一个一个地复制它们既丑陋又容易出错。

  2. 更重要的是,每当向类中添加新属性时,都需要更新复制构造函数,这就造成了维护的噩梦。

我个人想做这样的事情:

A(const A &a) : A(a)
{
   // do deep copy of p
   :::
}

所以先调用默认的拷贝构造函数,然后进行深拷贝。
不幸的是,这似乎不起作用。

有没有更好的方法来做到这一点? 一个限制 - 我不能使用共享/智能指针。


Sbi 的建议很有道理。我想我会创建包装类来处理资源。我不想使用 shared_ptr,因为 boost 库可能并非在所有平台上都可用(至少在标准发行版中不可用,OpenSolaris 就是一个例子)。

我仍然认为,如果你能以某种方式让编译器为你创建默认的构造函数/赋值运算符,并且你可以在上面添加你的功能,那会很棒。我认为手动创建的复制构造函数/赋值运算符函数创建起来很麻烦,维护起来也是一场噩梦。所以我个人的经验法则是不惜一切代价避免自定义复制构造函数/赋值运算符。

感谢大家的回复和有用的信息,并对我的问题中的错别字表示歉意。我是用手机输入的。

最佳答案

根据经验:如果您必须手动管理资源,将每个资源包装到自己的对象中。

char*使用适当的复制构造函数放入它自己的对象中,并让编译器为 A 执行复制构造函数. 请注意,这也涉及分配和销毁,您在问题中没有提到,但仍然需要处理。
标准库有几种类型可供选择,其中 std::stringstd::vector<char> .

关于c++ - 创建一个易于维护的复制构造函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3192707/

相关文章:

c++ - 为什么 `unsigned int` 导致程序崩溃?

c++ - 如何在不调用默认构造函数的情况下创建 C 风格的数组?

typescript - Ctor 不是构造函数

C++ - 在类中构造对象

c++ - 在 C++ 中为没有默认构造函数的成员复制构造函数

c++ - 为什么add函数在c++ 11线程中没有效果?

java - 如何使用 Java 构造函数实例化数组?

java - 克隆与仅仅赋值有何不同(为什么要费心实现 Cloneable 接口(interface))?

java - Java 中克隆列表元素

c++ - C++ [Xcode] 中可变数量的参数