日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

checked_delete问题: Beyond the C++ STL: an introduction to boostdeleter::do_it

發布時間:2025/3/21 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 checked_delete问题: Beyond the C++ STL: an introduction to boostdeleter::do_it 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

環境:

Visual studio 2017

boost庫編譯選項: msvc141,multi,win64,debug,shared

demo工程設置: debug, win32


問題源:

《Beyond the C++ STL: an introduction to boost》書上Part I, Library 3, checked_delete章節

如果把 deleter.h, deleter.cpp, to_be_deleted.h三個文件內容整合到一個文件里,

編譯后會提示 "?warning C4150: 刪除指向不完整“to_be_deleted”類型的指針;沒有調用析構函數"

運行后調用?deleter::do_it? 時會間接調用到?~to_be_deleted()。

調用?deleter::delete_it? 時則不會間接調用到?~to_be_deleted()。

最后調用完?~to_be_deleted()程序結束時才報一個異常錯誤。

很奇怪的地方啊!看來是編譯器工作方式的不同導致的吧。。。


// deleter.h class to_be_deleted; class deleter { public:void delete_it(to_be_deleted* p);void do_it(to_be_deleted* p); };// deleter.cpp //#include "deleter.h" #include "boost/checked_delete.hpp" void deleter::delete_it(to_be_deleted* p) {delete p; } void deleter::do_it(to_be_deleted* p) { boost::checked_delete(p); // typedef char type_must_be_complete[sizeof(T)]; 所有代碼放入一個文件,這句居然能編譯通過?? }// to_be_deleted.h #include <iostream> class to_be_deleted { public:~to_be_deleted() {std::cout <<"I'd like to say important things here, please.";} };// Test application //#include "deleter.h" //#include "to_be_deleted.h" int main() {to_be_deleted* p = new to_be_deleted;deleter d;d.delete_it(p);d.do_it(p); }


總結

以上是生活随笔為你收集整理的checked_delete问题: Beyond the C++ STL: an introduction to boostdeleter::do_it的全部內容,希望文章能夠幫你解決所遇到的問題。

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