为什么没有人似乎写'delete&someObj`?

好吧,这看起来很荒谬,但我经常看到代码使用引用删除动态分配的内存,如下所示:

Obj* ptr = &someObj;
delete ptr;

而不是似乎是合乎逻辑的选择:

delete &someObj;

这背后是否有任何特别的安全原因,还是仅仅是一种风格?


没有增加安全性。 这是编写引用代码的人的风格选择。

PS。 通过引用删除动态分配的内存是(或应该)非常罕见。 将动态对象的地址存储在指针中是一个非常常见的约定。 现在,根本不需要手动删除任何内存,因为任务通常委托给智能指针。


好的,如果你动态地分配内存,那么你会收到一个指针,而不是数值本身。

int* a = new int;

然后你必须调用delete并传递指针:

delete a;

如果你试图把这个变量赋值给int b = *a; 那么b 不会动态分配。 所以你不能写delete &b; 因为b分配在堆栈上,并在超出范围时自动清理。 如果将它分配给像int& c = *a; 那么你可以写delete &c; 但这是一种很容易出错的风格,因为你不能保证被c引用的内存是动态分配的。


运算符“delete”取消分配一块内存,其语法是:

  • delete cast-expression
  • delete[] cast-expression
  • 根据C ++的规定,cast-expression参数必须是一个指向先前为对象分配的内存块的指针 。 所以delete ptr不是关于风格的东西,也不是与安全有关。

    链接地址: http://www.djcxy.com/p/95079.html

    上一篇: Why does nobody ever seem to write `delete &someObj`?

    下一篇: Why does the order of NgModule imports matter?