为什么没有人似乎写'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
不是关于风格的东西,也不是与安全有关。