如何删除函数内的实例化对象,然后在调用另一个函数时删除?
例如:
int function_test(){
object* a = new object();
}
int function_test2(){
delete a;
}
调用function_test2()时需要删除对象a。 Function_test()创建并设置对象a的值。
答案 0 :(得分:0)
为了删除某些内容,您需要指向某个内容的指针。
当您在函数function_test2
中分配对象并希望在function_test2
中删除它时,您需要为function_test
设置方法来获取对象的指针你想删除。
有多种方法可以做到这一点,但最常见的方法是让function_test2
将指针返回给调用者,然后将该指针传递给object* function_test() {
object* a = new object();
...
return a;
}
void function_test2(object* a) {
...
delete a;
}
:
object obj = function_test();
...
function_test2(obj);
来电者需要"转移"指针,如下:
function_test
传递指针的其他方法是使用文件静态指针,使用全局指针,并在函数function_test2
和OnConnected
是类的成员函数时使用实例变量。
答案 1 :(得分:0)
您无法在函数之间传输局部变量。如果您喜欢这样做,我建议您返回指针,以便将其传递给下一个函数。
object *function_test()
{
auto *o = new object{};
return o;
}
然而,这有一个缺点,你必须在你调用它的地方捕获这个变量,并且必须进行内存管理。很可能你只想使用面向对象的东西,类似于:
class ObjectOwner final
{
public:
int function_test(){
a = new object();
}
int function_test2(){
delete a;
}
private:
object *a{nullptr};
};
可以用作:
ObjectOwner owner;
owner.function_test();
owner.function_test2();
更好的是使用std::unique_ptr<object>
,这样当你忘记调用第二个函数时,内存就会被释放。
最后,您可以考虑使用构造函数/析构函数。
class ObjectOwner final
{
public:
ObjectOwner()
: a(std::make_unique<object>())
{
}
~ObjectOwner() = default;
void func() { /*Do something with a*/ }
private:
std::unique_ptr<object> a{};
};
允许你写:
ObjectOwner owner{};
owner.func();