你为什么要一个浅拷贝(而不是参考)?

时间:2015-09-01 12:05:38

标签: c++ copy-constructor

一直在使用boost disjoint_set。它有一个复制构造函数。据我所知,它使用在构造函数调用期间移交的指针来访问它的数据,它本身并不管理内存分配。因此,当您复制时,实际数据(与复制std::vector<T>时不同)不会被复制。您将获得两个看似独立的实例(因为您没有使用引用)来访问和修改相同的数据。这似乎是偶然的,用例并不清楚。

所以问题是,为什么你会说disjoint_set的复制构造函数是有用的,为什么你要创建一个复制构造函数来返回一个实例的浅表副本?

1 个答案:

答案 0 :(得分:1)

你的意思是这个:inline disjoint_sets(const self& c) : rank(c.rank), parent(c.parent) {}?这里不清楚它的浅或深拷贝。 rank和parent是模板类型:class RankPA,类ParentPA,因此无论副本是浅还是深,它都取决于此模板的客户端。

  

为什么要创建一个复制构造函数来返回实例的浅表副本?

当你动态分配内存时它很危险,你可能会考虑使用移动语义。