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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

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

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

環(huán)境:

Visual studio 2017

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

demo工程設(shè)置: debug, win32


問題源:

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

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

編譯后會提示 "?warning C4150: 刪除指向不完整“to_be_deleted”類型的指針;沒有調(diào)用析構(gòu)函數(shù)"

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

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

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

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


// 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); }


總結(jié)

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

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。