函数参数中的新运算符

new operator in function parameter

本文关键字:运算符 参数 函数      更新时间:2023-10-16

我有一个函数,该函数接受一个类指针。 问题是我像这样调用类指针。

Function (new ChildClass);

该函数看起来像这样

void Function (BaseClass *instance)
{
    childClassInstance = instance;
}

我之所以使用 new 关键字调用它,是因为在我的函数之外需要它。我想知道的是。当我准备好删除实例时。我该怎么做?既然它在函数参数中,我将如何调用它以删除它?或者我如何能够访问它在内存中的位置以便能够删除它?

如果这是不可能的,还有什么更好的解决方案呢?

这是可能的,但也有更好的解决方案。使用 RAII。或者通过引用传递参数:

void Function (BaseClass& instance);
//...
ChildClass c;
Function(c);

即使您保留了指针,也不必创建一个带有 new 的新实例来传递指针作为参数:

ChildClass c;
Function(&c);

在调用函数之前,可以声明一个变量来存储指针。然后,您可以在函数返回后将其删除。

ChildClass *c = new ChildClass;
Function(c);
delete c;

但是,如果这是您的成语,那么只需使用自动实例即可。然后,当它超出范围时,您的对象将自动删除。

ChildClass c;
Function(&c);

如果使用 new 创建对象,则必须将该指针保存在某个位置,以便以后可以将其删除。没有其他选择。但这是使指针变得棘手的原因之一,因此您应该尽可能避免使用它们。您可以像其他人所说的那样避免new,或者您可以使用智能指针自动为您删除对象。