如果我有一门课
template <typename T>
struct C {
...
private:
auto_ptr<T> ptr;
};如何定义C:的复制构造函数:
它不可能是
template <typename T>
C<T>::C(const C& other) 因为我想从其他人那里复制auto_ptr,所以我已经通过移除所有权来更改了其他人。将复制构造函数定义为
template <typename T>
C<T>::C(C& other) {}发布于 2010-06-22 04:07:33
如果要防止所有权转移和/或复制,可以定义复制构造函数和赋值运算符private,从而禁止类的用户复制或分配对象。
发布于 2010-06-22 04:09:57
你真的想复制你的类的状态还是转移它?如果你想复制它,你可以像任何其他带有指针的类一样复制它:
template < typename T >
C<T>::C(C const& other) : ptr(new T(*other.ptr)) {} // or maybe other.ptr->clone()如果你真的想要转移指针的所有权,你可以用一个非常数的"copy“构造函数来做,但我建议你做一些在调用位置更明显的事情;告诉阅读代码的人所有权已经转移的东西。
发布于 2010-06-22 04:19:06
没有所谓的“标准”复制构造函数,但人们确实希望它们以某种方式运行。如果您的对象要在复制时进行所有权转移,那么创建一个掩盖这一事实的复制构造函数是一个坏主意。一种更好的方法是创建一个方法来清楚地说明这一点。(您可以将其称为CloneAndTransfer或类似的名称。)
https://stackoverflow.com/questions/3088097
复制相似问题