函数参数中的新运算符
new operator in function parameter
我有一个函数,该函数接受一个类指针。 问题是我像这样调用类指针。
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,或者您可以使用智能指针自动为您删除对象。
相关文章:
- 如何使基类的运算符对基类的可变参数数可见(请参阅下面的代码)?
- 具有两个间接寻址运算符 (C++) 的函数参数的用途
- 运算符重载:"operator+"必须采用零个或一个参数
- 为什么数组大小信息可用于"sizeof"运算符和 delete[] 运算符,但在将数组作为参数传递到
- 参数相关查找和流运算符重载
- C++:使用运算符 = 调用多参数构造函数
- 了解布尔运算符==(参数 1,参数 2)
- 我能否根据其运算符()的签名专门化可变参数模板参数
- SFINAE 检查模板参数运算符
- 不允许运算符 const 参数调用 const 成员函数
- 为私有结构定义双参数运算符重载
- C++ 通过自定义赋值运算符隐式转换函数参数
- 函数参数变量总是需要 & 或 * 运算符吗?
- 算术运算符参数类型
- 隐式转换以匹配运算符参数
- 对重载运算符参数执行隐式转换时出现编译器错误
- 避免在C++中强制转换运算符参数
- 如果给定模板不是运算符参数类型的专用模板,则禁用运算符重载
- 以及C++中的运算符参数求值
- 这个函数的运算符参数太多