如何在C++中将局部变量转换为指针?

Mat*_*oli 5 c++ pointers

我有一个变量是一个对象:

Foo x;
Run Code Online (Sandbox Code Playgroud)

我需要调用一个需要Foo*的函数.我如何从Foo转换为Foo*.

我知道这不会起作用:

Foo* y = &x;
o->setFoo(y);
Run Code Online (Sandbox Code Playgroud)

因为" x "是局部变量,所以它将被销毁并且我给出的指针将指向任何东西.

我能怎么做 ?

注意:我无法修改变量的功能或类型!

use*_*379 6

如果定义了适当的复制构造函数,

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.


vit*_*aut 1

您可以使用 new 动态分配类的对象Foo,例如

o->setFoo(new Foo);
Run Code Online (Sandbox Code Playgroud)

请注意,您必须考虑该对象的所有权,因为如果setFoo不删除它,就会出现内存泄漏。