![1653a1cb2f9ea0bc8c2e70520b9b49c4.png](https://img-blog.csdnimg.cn/img_convert/1653a1cb2f9ea0bc8c2e70520b9b49c4.png)
最近在写OpenCL遇到了一些C++动态内存的问题。由于之前一直在用Python,大一学的C基本都忘光光了。故简单学习了一下,写下本文作为笔记。
用一个动态创建的数组作为例子,其他(如struct)也应该类似。
首先是创建一个长度为10的数组,然后删除掉:
#include
同样的目标,可以换第二行为比较C++的写法:
int
如果怕忘记删除,可以用smart pointer(事实上用这个会更好,关于其overhead,可以看看这里的讨论
How much is the overhead of smart pointers compared to normal pointers in C++?stackoverflow.com![f80ac3282d02d31826b4e05e1222f990.png](https://img-blog.csdnimg.cn/img_convert/f80ac3282d02d31826b4e05e1222f990.png)
)来自动释放指针指向的内存:
#include
可以看到上面在allocate memory的时候用了两种方法,一个是new,一个是malloc。具体区别可以看:
in-what-cases-do-i-use-malloc-and-or-newstackoverflow.com
总的来说,用new会自动调用constructor再allocate memory。相较于前者,malloc只会做后一步。所以在C++里面其实保持用new是一个不错的选择。而且malloc还另外要做一次typecasting,比较麻烦。
另外感谢IceBear指出错误,new需要和delete搭配,而malloc需要和free搭配。