c ++我是否需要手动删除一个void*指针,然后指向另一个具体类型?

Bil*_*dsf 2 c++ pointers c++11

假设我有一个指针void* p,然后在一些传入和传出函数后,让我们说p现在指向int.然后我需要手动删除delete static_cast<int*>(p)吗?

在大多数地方,人们说delete只有在有的时候才会发生new.但在这种情况下,它不是,但C++本身还记得发布那个内存吗?

Som*_*ken 6

这一切都取决于int你指向的是如何分配的,你只是delete你的new.


正确(intnew'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++中,你真的不应该使用newdelete坚持使用智能指针或标准容器.

  • @Xirema删除void*未定义. (2认同)