日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

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

c/c++

C++ 内存基本构件 placement new

發布時間:2023/12/1 c/c++ 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。