Arn*_*rah 5 c++ pointers new-operator delete-operator
所以,我在读有关删除指针参数一些堆栈溢出的答案特别是这些的(1,2),因为我建立一个功能,需要一个指针作为参数.
该功能的简化版本如下:
void draw(Shape * b)
{
//Draws code....
}
Run Code Online (Sandbox Code Playgroud)
不,我在这里感到困惑的是删除.例如,如果函数被调用如下:
Shape * c;
draw(&c);
Run Code Online (Sandbox Code Playgroud)
然后我不必删除任何东西.但如果它是这样的:
draw(new Shape{});
Run Code Online (Sandbox Code Playgroud)
然后我必须.所以基本上,我的问题是,如果在new参数中使用关键字,我应该如何删除.没有可能在函数中抛出的异常,因此不需要RAII.有任何想法吗?请不要提出任何涉及智能指针的内容,因为这是我已经做过的,这个问题就是好奇心.另外,请回答知道函数可以同时使用新运算符或现有指针,这基本上意味着我需要一种方法来区分两者.另外,对于我的链接:这些并没有真正回答我的问题,因为它们中的大多数只依赖于智能指针,或者一个呼叫或另一个.
现在我对此感到困惑的是删除.
这正是我们永远不会将原始指针作为参数传递的原因.
以下是您可能需要考虑的一些经验法则:
你可能不会改变我传给你的形状:
void draw(const Shape& shape);
你可以改变形状,但我保留它的所有权:
void draw(Shape& shape);
请使用我的形状副本:
void draw(Shape shape);
请取消我对这种形状的所有权:
void draw(std::unique_ptr<Shape> shape);
让我们分享这个形状:
void draw(std::shared_ptr<const Shape> shape);
你可能会用
void draw(std::observer_ptr<Shape> shape)
Run Code Online (Sandbox Code Playgroud)
要么
void draw(Shape& shape)
Run Code Online (Sandbox Code Playgroud)
过度
void draw(Shape * shape)
Run Code Online (Sandbox Code Playgroud)
明确表示draw不回收所有权.
当你收回它时,在签名中使用智能指针.
void Take(std::unique_ptr<Shape> shape);
Run Code Online (Sandbox Code Playgroud)
要么
void Take(std::shared_ptr<Shape> shape);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1387 次 |
| 最近记录: |