我有希望的push_back成双端队列的类。问题是,当我推回我需要原始对象进行改变。因此我需要一个非常拷贝构造函数。现在,如果我实现了我的常拷贝构造函数被调用。如果我删除了const的构造函数,我得到一个编译错误,关于无可用构建函数。我如何的方式,当我通过它,我可以修改原来的结构实现这一点?我需要当它超出范围进行修改BC类自毁的对象,我想告诉它不这样做,当周围有另一个实例。我不能使用升压因为我的平台犯规支持。

有帮助吗?

解决方案

您的问题是,标准容器的一个基本要求是,对象是拷贝构造。这不仅意味着他们有一个拷贝构造函数,但是这也意味着,如果你复制的对象,复制和原来是一样的。

您对象,但是,类似于移动-构造语义。也就是说,在搬迁后,新的对象拥有的资源,和旧的对象是空的。这不是由双端队列为C ++ 03的支持。也就是说,通过该方式,即禁止投入的auto_ptr放入容器一样的道理。

下一个C ++版本,称为的C ++ 0x将支持那些通过引入特殊的移动构造移动语义。到那时,你将不得不使用,当你想要把它变成一个标准的容器中的的所有权的对象。这意味着如果你复制你的对象,原来超出范围,所拥有的资源不被释放,直到所有的拷贝出去的范围。请考虑使用boost :: shared_ptr的,例如,或者它包装成类,如果你不想编写自己的类管理这一点。

其他提示

如果你没有做什么狡猾的资源(见其他意见),然后让你想改变成员变量的可变的将允许你改变它在一个const函数。

您不能做你想要做的事。你必须使用指针,无论是平原或智能(但不是auto_ptr的<>)。为什么你不能使用boost智能指针?他们是非常轻便,并应在所有合理标准的C ++编译器的工作。你不必使用所有的Boost。

根据你正在尝试做的(更多细节将是不错的),您可以修改对象前/后调用push_back或写一个简单的包装类,它的一个指针类,并可以插入一个deque。然后,这个对象可以做适当的事情你对建筑/销毁/等类。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top