簡體   English   中英

重載刪除,純虛擬函數調用

[英]overloading delete, pure virtual func call

所以我想重載刪除抽象虛擬類。 這將在另一個庫中的派生類中調用deleteMe()。 這是為了防止錯誤/崩潰在這里提到C ++在庫之間混合新的/刪除的?

當我打電話給我的基類中的delete刪除我時,出現錯誤“純虛擬函數調用”。 然后我發現它已經給我的dtor打電話了。 我如何以不調用dtor的方式重載delete或編寫此代碼,以便我可以編寫delete obj; 並使其調用obj-> deleteMe(),然后調用它自己的刪除函數和dtor?

聽起來像是像普通函數那樣使用運算符刪除,應該可以執行任意操作。 但是,運算符delete僅應釋放作為第一個參數分配給它的內存,它是指向該內存區域的指針。

該指針將指向對象所在的內存位置。 但是,此時,對象的析構函數已經運行,並且對象不再存在。 您根本無法調用任何成員函數-虛函數更是如此!

我有一種感覺,你弄錯了運算符的目的。 如果調用delete pointer ,則編譯器將調用對象的析構函數,然后調用釋放函數以釋放分配的內存,這稱為operator delete

好吧,為什么不通過boost::shared_ptr使用我們之前向您展示的解決方案呢?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM