我有一个变量是一个对象:
Foo x;
Run Code Online (Sandbox Code Playgroud)
我需要调用一个需要Foo*的函数.我如何从Foo转换为Foo*.
我知道这不会起作用:
Foo* y = &x;
o->setFoo(y);
Run Code Online (Sandbox Code Playgroud)
因为" x "是局部变量,所以它将被销毁并且我给出的指针将指向任何东西.
我能怎么做 ?
注意:我无法修改变量的功能或类型!
如果定义了适当的复制构造函数,
o->setFoo(new Foo(x));
Run Code Online (Sandbox Code Playgroud)
但是那时o的析构函数应该删除x (setFoo如果它已经设置的话,也可能也应该删除).
注意:定义析构函数是不够的.
还需要定义复制构造函数/赋值运算符,并且:
有关说明,请参阅规则4.
If you can't touch the class definition of o at all, then you'll need to be very careful about the memory allocation/deallocation so you don't leak memory.
您可以使用 new 动态分配类的对象Foo,例如
o->setFoo(new Foo);
Run Code Online (Sandbox Code Playgroud)
请注意,您必须考虑该对象的所有权,因为如果setFoo不删除它,就会出现内存泄漏。