我有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
对象被创建时,它一次只需要在一个地方拥有。在这种情况下,它在线程之间传递并在事务完成时被删除。这就是为什么我希望使用std::autp_ptr
. - 我非常愿意考虑提升智能指针,但如果有替代方案,我希望能保证这种唯一性。