2

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

Function (new ChildClass);

该函数看起来像这样

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

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

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

4

3 回答 3

3

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

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

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

ChildClass c;
Function(&c);
于 2012-08-07T21:45:27.063 回答
1

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

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

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

ChildClass c;
Function(&c);
于 2012-08-07T21:44:19.137 回答
0

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

于 2012-08-07T21:48:17.290 回答