函数参数中的new运算符

时间:2012-08-07 21:41:15

标签: c++ class operator-keyword base

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

Function (new ChildClass);

该功能看起来像这样

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

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

如果无法做到这一点会有什么更好的解决方案?

3 个答案:

答案 0 :(得分:3)

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

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

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

ChildClass c;
Function(&c);

答案 1 :(得分:1)

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

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

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

ChildClass c;
Function(&c);

答案 2 :(得分:0)

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