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;
}