C++ 通过引用指定对象,不复制
以下操作失败,因为我要分配的对象正在被复制,然后被销毁。因此,我应该将C++ 通过引用指定对象,不复制,c++,variable-assignment,C++,Variable Assignment,以下操作失败,因为我要分配的对象正在被复制,然后被销毁。因此,我应该将B::data声明为指针,还是有更好的方法通过引用而不是复制来赋值(我希望避免触发dtor) 理想情况下,我不想使用new,因为我想在堆栈上分配myContainer(因此不必手动管理内存,这是dtor中自动释放的全部内容)。我要做的是让数据成为myContainer的参考。因此: class B { public: class myContainer { ... }; myC
B::data
声明为指针,还是有更好的方法通过引用而不是复制来赋值(我希望避免触发dtor)
理想情况下,我不想使用
new
,因为我想在堆栈上分配myContainer(因此不必手动管理内存,这是dtor中自动释放的全部内容)。我要做的是让数据
成为myContainer
的参考。因此:
class B
{
public:
class myContainer
{
...
};
myContainer& data;
B(myContainer& d) : data(d) {}
};
void foo()
{
B::myContainer a;
B x(a);
}
注意:在这种情况下,您需要myContainer
至少与B
保持相同的时间,因此,如果您可以预见有人会这样做,那么在这种情况下不做是有道理的:
B* bar()
{
B::myContainer a;
B *p = new B(a);
return p;
}
现在,当
bar
结束时,a
正在被销毁。但是在*p
中仍然有对它的引用,所以当我们试图以某种方式使用p->data
时,事情会变得非常奇怪 抱歉-我对我的示例有点懒惰和不精确,mycontainer
实际上是一个子类,现在已经更新。除了您必须如何键入它(假设它是public
,否则它不能在类外使用)更改很少。正如它当前的状态(在原始帖子中)从词汇上讲,myContainer
不就是一个内部类吗?要成为一个子类,您需要继承,即类myContainer:public B
是的,我的意思是内部类。谢谢。我想我已经在相关的地方编辑了所需的“B::”。正如我所说,它实际上并没有改变概念上的解决方案,只是改变了您必须键入的内容的细节。除非我错过了什么。
B* bar()
{
B::myContainer a;
B *p = new B(a);
return p;
}