我有一个类foo
,其中包含一个std::auto_ptr成员,我想进行复制构造,但似乎不允许这样做。赋值也有类似的问题。请看下面的示例:
struct foo
{
private:
int _a;
std::string _b;
std::auto_ptr< bar > _c;
public:
foo(const foo& rhs)
: _a(rhs._a)
, _b(rhs._b)
, _c(rhs._c)
// error: Cannot mutate rhs._c to give up ownership - D'Oh!
{
}
foo& operator=(const foo& rhs)
{
_a = rhs._a;
_b = rhs._b;
_c = rhs._c;
// error: Same problem again.
}
};
我可以将_c
声明为mutable
,但我不确定这是否正确。有没有更好的解决方案?
编辑
好吧,我没有得到我期望的答案,所以我会更具体地说明问题。
- 在堆栈上创建了一个
foo
类型的对象,并按值传递到容器类(不是stl),然后超出范围。我无法控制容器代码。(实际上是带错误的活动队列实现。) bar
类是一个相当重量级的解析器。它在new
和delete
方面性能非常差,因此即使它是可复制的,它也会非常昂贵。- 我们可以保证当创建
bar
对象时,它只需要在1个地方拥有所有权。在这种情况下,它在线程之间传递并在完成事务时删除。这就是我希望使用std::autp_ptr
的原因。 - 我非常愿意考虑boost智能指针,但如果有其他选择,我希望保证这种唯一性。