c++万能但释放内存时痛苦的void *指针及替代方案 您所在的位置:网站首页 void空间 c++万能但释放内存时痛苦的void *指针及替代方案

c++万能但释放内存时痛苦的void *指针及替代方案

2024-06-28 22:27| 来源: 网络整理| 查看: 265

void *在c/c++中可以说是万金油的存在,无论什么类型的数据都可以塞给它,但是释放的时候,却需要知道具体的类型,才能调用delete去释放,直接delete void *的指针是未定义的有可能会导致内存泄露。

如果编译器支持c++17, 可用std::any来代替void *, 如果编译器只支持c++ 11可以用shared_ptr来替代。下面以shared_ptr来做为例子

释放void *要知道原来申请的对象是什么类型,伪代码如下:

void *p = new xx;

if p is A:

     delete (A *)p;

else if p is int

     delete (int *)p

else ....

替换成shared_ptr如下

std::shared_ptr p = std::make_shared(xx);

就一行,不需要手动去释放,生命周期到了,会自动释放内存。

 

具体c++代码如下,其中有注释

#include #include #include #include using namespace std; class Base { public: Base(); virtual ~Base(); }; Base::Base() { std::cout


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有