[Boost-bugs] [Boost C++ Libraries] #13338: checked_delete问题

Subject: [Boost-bugs] [Boost C++ Libraries] #13338: checked_delete问题
From: Boost C++ Libraries (noreply_at_[hidden])
Date: 2017-12-13 08:50:05


#13338: checked_delete问题
------------------------------+---------------------------
 Reporter: linzhongzi@… | Owner: No-Maintainer
     Type: Bugs | Status: new
Milestone: To Be Determined | Component: utility
  Version: Boost 1.65.0 | Severity: Problem
 Keywords: |
------------------------------+---------------------------
 çŽ¯å¢ƒï¼š
 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()程序结束时才报一个异常错误。
 å¾ˆå¥‡æ€ªçš„地方啊!看来是编译器工作方式的不同导致的吧。。。

 code like this:

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

-- 
Ticket URL: <https://svn.boost.org/trac10/boost/ticket/13338>
Boost C++ Libraries <http://www.boost.org/>
Boost provides free peer-reviewed portable C++ source libraries.

This archive was generated by hypermail 2.1.7 : 2017-12-13 08:56:38 UTC