一直在使用boost disjoint_set
。它有一个复制构造函数。据我所知,它使用在构造函数调用期间移交的指针来访问它的数据,它本身并不管理内存分配。因此,当您复制时,实际数据(与复制std::vector<T>
时不同)不会被复制。您将获得两个看似独立的实例(因为您没有使用引用)来访问和修改相同的数据。这似乎是偶然的,用例并不清楚。
所以问题是,为什么你会说disjoint_set
的复制构造函数是有用的,为什么你要创建一个复制构造函数来返回一个实例的浅表副本?
答案 0 :(得分:1)
你的意思是这个:inline disjoint_sets(const self& c) : rank(c.rank), parent(c.parent) {}
?这里不清楚它的浅或深拷贝。 rank和parent是模板类型:class RankPA,类ParentPA,因此无论副本是浅还是深,它都取决于此模板的客户端。
为什么要创建一个复制构造函数来返回实例的浅表副本?
当你动态分配内存时它很危险,你可能会考虑使用移动语义。