Bil*_*dsf 2 c++ pointers c++11
假设我有一个指针void* p,然后在一些传入和传出函数后,让我们说p现在指向int.然后我需要手动删除delete static_cast<int*>(p)吗?
在大多数地方,人们说delete只有在有的时候才会发生new.但在这种情况下,它不是,但C++本身还记得发布那个内存吗?
这一切都取决于int你指向的是如何分配的,你只是delete你的new.
正确(int是new'd):
int* a = new int;
void* p = a;
//somewhere later...
delete static_cast<int*>(p);
Run Code Online (Sandbox Code Playgroud)
坏(int自动管理):
int a = 0;
void* p = &a;
//somewhere later...
delete static_cast<int*>(p);
Run Code Online (Sandbox Code Playgroud)
回答评论代码,做:
int* a = new int;
void* p = a;
delete p;
Run Code Online (Sandbox Code Playgroud)
是从来没有好.你永远不应该delete通过a void*,它是未定义的行为.
旁注:在现代C++中,你真的不应该使用new或delete坚持使用智能指针或标准容器.
| 归档时间: |
|
| 查看次数: |
232 次 |
| 最近记录: |