以下失败,因为我要分配的对象被复制然后被破坏。那么我应该将其声明B::data
为指针,还是有更好的方式通过引用而不是复制来分配(我想避免触发 dtor)?
class B {
class myContainer{
myContainer() {/* allocate memory */}
~myContainer() {/* free memory */}
...
};
myContainer data;
};
...
void foo() {
B x;
x.data = myContainer(...); // creates a myContainer, *copies* to x.data, then destroys
}
理想情况下,我不想使用new
,因为我想在堆栈上分配 myContainer(因此不必手动管理内存,这是在 dtor 中自动释放的全部意义)。