繁体   English   中英

C ++ auto_ptr和副本构造

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM