欢迎访问 生活随笔!

生活随笔

当前位置: 首页 > 编程语言 > c/c++ >内容正文

c/c++

C++ 内存基本构件 placement new

发布时间:2023/12/1 c/c++ 48 豆豆
生活随笔 收集整理的这篇文章主要介绍了 C++ 内存基本构件 placement new 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

用法以及编译器解释

placement new 允许我们将object构建于已经分配的内存上。(所以此时必须有个指针指向已经分配好的内存)
没有所谓的placement delete ,因为placement new根本没有分配内存.
也有种说法,是将placement new对应的内存释放掉的操作为placement delete。

char* buf = new char[sizeof(Complex)*3]; Complex* pc = new(buf)Complex(1,2); //将对象分配在已经分配好的内存buf上 ... delete [] buf;

被编译器转为:

Complex *pc; try{1void mem = operator new(sizeof(Complex),buf); //在顶点内存2、pc = static_cast<Complex*>(mem); //转型3、pc->Complex::Complex(1,2); //调用构造函数 } catch(std::bad_alloc){//若allocation失败就不执行构造函数 }

pc、buf指向同一个地方。

关于operator new,此处用的函数与之前提到的函数有点不一样:https://blog.csdn.net/qq_42604176/article/details/111638568
这里的用法为:

你传递分配好的内存给它,它什么都没做,将地址返回。
于是我们可以总结,placement new就是调用了构造函数。
注意,这三种写法是一致的:

总结

以上是生活随笔为你收集整理的C++ 内存基本构件 placement new的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。