c++万能但释放内存时痛苦的void *指针及替代方案 | 您所在的位置:网站首页 › void空间 › c++万能但释放内存时痛苦的void *指针及替代方案 |
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 实验室设备网 版权所有 |