首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C++ auto_ptr和复制构造

C++ auto_ptr和复制构造
EN

Stack Overflow用户
提问于 2010-06-22 04:03:48
回答 3查看 481关注 0票数 0

如果我有一门课

代码语言:javascript
复制
template <typename T>
struct C {
...

private:
  auto_ptr<T> ptr;
};

如何定义C:的复制构造函数:

它不可能是

代码语言:javascript
复制
template <typename T>
C<T>::C(const C& other) 

因为我想从其他人那里复制auto_ptr,所以我已经通过移除所有权来更改了其他人。将复制构造函数定义为

代码语言:javascript
复制
template <typename T>
C<T>::C(C& other) {}
EN

回答 3

Stack Overflow用户

发布于 2010-06-22 04:07:33

如果要防止所有权转移和/或复制,可以定义复制构造函数和赋值运算符private,从而禁止类的用户复制或分配对象。

票数 1
EN

Stack Overflow用户

发布于 2010-06-22 04:09:57

你真的想复制你的类的状态还是转移它?如果你想复制它,你可以像任何其他带有指针的类一样复制它:

代码语言:javascript
复制
template < typename T >
C<T>::C(C const& other) : ptr(new T(*other.ptr)) {} // or maybe other.ptr->clone()

如果你真的想要转移指针的所有权,你可以用一个非常数的"copy“构造函数来做,但我建议你做一些在调用位置更明显的事情;告诉阅读代码的人所有权已经转移的东西。

票数 1
EN

Stack Overflow用户

发布于 2010-06-22 04:19:06

没有所谓的“标准”复制构造函数,但人们确实希望它们以某种方式运行。如果您的对象要在复制时进行所有权转移,那么创建一个掩盖这一事实的复制构造函数是一个坏主意。一种更好的方法是创建一个方法来清楚地说明这一点。(您可以将其称为CloneAndTransfer或类似的名称。)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3088097

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档