[英]C++ auto_ptr and copy construction
如果我有课
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) {}
如果要防止所有权转让和/或复制,可以定义复制构造函数和赋值运算符private
,从而禁止类的用户复制或分配对象。
您是否真的要复制您的班级状态或进行转移? 如果要复制它,则可以像其他任何有指针的类一样进行复制:
template < typename T >
C<T>::C(C const& other) : ptr(new T(*other.ptr)) {} // or maybe other.ptr->clone()
如果您实际上想转让指针的所有权,则可以使用非const“复制”构造函数来实现,但我建议您在调用站点上做一些更明显的事情; 告诉人们阅读所有权已转让的代码。
没有“标准”副本构造函数这样的东西,但是人们确实希望它们以某种方式表现。 如果您的对象要在副本上进行所有权转移,那么使副本构造函数模糊这一事实是一个坏主意。 更好的方法是创建一个明确的方法。 (您可以将其称为CloneAndTransfer或类似名称。)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.