【发布时间】:2016-08-24 13:29:44
【问题描述】:
所以我正在阅读一些关于删除指针参数的 Stack Overflow 答案,尤其是这些(1,2),因为我正在构建一个需要指针作为参数的函数。
函数的简化版本如下:
void draw(Shape * b)
{
//Draws code....
}
不,我在这里感到困惑的是删除。例如,如果函数是这样调用的:
Shape * c;
draw(&c);
那我就不用删除任何东西了。但是如果是这样的话:
draw(new Shape{});
那么我必须这样做。所以基本上,我的问题是,如果参数中使用了new 关键字,我应该如何删除。函数中没有可能引发的异常,因此不需要 RAII。有任何想法吗?请不要提出任何涉及智能指针的建议,因为这是我已经要做的,这个问题是好奇。另外,请回答知道该函数可以同时采用新运算符或现有指针,这基本上意味着我需要一种方法来区分两者。另外,对于我的链接:这些并不能真正回答我的问题,因为它们中的大多数只依赖于智能指针,或者一个调用或另一个。
【问题讨论】:
-
致所有回答的人:您意识到代码是一个示例,对吧?这不是实际代码,而是一个(我认为)会产生相同答案的示例。这不是关于代码,而是真正的删除。
-
我认为无论示例如何,答案都是有效的。通常没有办法仅从原始指针来判断对象的生命周期。
标签: c++ pointers new-operator delete-operator