在記憶體特定位置填資料後,placement new 是否完全等價與cast?

時間 2022-01-21 06:49:32

1樓:Van

不一定等價。

情況1 如果有虛函式

因為構造的時候會去建立vptr指向虛表,如果直接在記憶體上cast成目標類指標,則vptr是0x00 則會出錯。

情況2 沒有虛函式無static值的修改

完全等價

2樓:錢念峰

申請好的記憶體上需要預留vptr的空間。placement new就是呼叫建構函式

3樓:丁冬

首先 placement new 然後依賴此前填充的資料永遠是不可靠的,所以你給出的基礎方案就不成立。反而是填充完資料直接轉換在特定條件下能良好定義地滿足你的需求。

4樓:

如果你能在其它方面良好配合的話,也不是不行:

例如說你本來需要在建構函式裡開啟乙個檔案,記錄檔案fd。現在就先把fd初始化為-1,然後在每個需要用的地方判斷一下是否已開啟。其他的一系列外部操作(包括但不限於程序、執行緒、共享資源、訊號、系統呼叫、日誌等)都可以用類似的「標記->延遲操作」的方式進行改動——這改動並不嚴格等價(尤其考慮併發環境),但仔細設計和規劃整個流程的話,最終效果一致的目的是能達到的。

無非就是,這麼幹有悖於現在主流的RAII思想。除非有什麼特別原因,不然一般都不這麼幹。

c 怎麼檢測記憶體洩露,怎麼定位記憶體洩露?

忘憂北萱草 C Bulilder 2007以上版本支援 ReporterMemoryLeakOnShutdown 變數,設定為 True 就能自動監測記憶體洩露。 低球 有興趣的話可以看看這個 裡面有很多很詳細的文件。ASAN的話效能也是很不錯的,wiki裡面也有和其他工具的比較 比如 Valgri...

手機上網時可以進行地理位置的定位,定位原理是什麼?

Coldwings GPS 伽俐略 北斗定位,原理目前來看都已經是無源多站時間差的定位方式了,簡單說就是衛星傳送個時間訊號和衛星位置,因為各衛星於手機距離不同所以手機收到的訊號會有時間差,拿出來解個方程組就能定位了。北斗同時還有有源定位方式,然而手機上顯然沒法做發射端,功耗太大了 微波站解角度的方法...

面對前輩,該如何定位自己的位置?

海涅心理 類似的問題我回答過。一切都是可能的,哪怕你想變成另外乙個人,比如你覺得交際能力強的小夥伴。但是,那意味著你得付出一些代價,你不再是你。是 你 重要,還是你眼中的 社交能力 重要,是個兩難的抉擇。 樂大仙兒 一切都是現象,而現象變化起來實在是太快了。用技巧去追逐現象也未免太累了。時刻保持一顆...