【发布时间】:2009-07-17 11:11:06
【问题描述】:
我有一个类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的原因。 - 我非常愿意考虑提升智能指针,但如果有替代方案,我希望能保证这种唯一性。
【问题讨论】:
标签: c++ smart-pointers auto-ptr