看板 C_and_CPP 關於我們 聯絡資訊
下面有一段簡單小程式是在測試Functor被產生時, 建構與解構被呼叫的狀況 我發現ctor只出現一次, 可是dtor卻出現兩次 這樣子我之後在做reference counting時可能會有問題 想請問為什麼dtor會多印一次呢 ? 程式如下: ( 測試環境為Visual Studio 2008 / WIN7) #include<iostream> class compare_class { public: void operator()() const { std::cout << "invoke functor" << std::endl; } compare_class() { std::cout << "ctor" << std::endl; } ~compare_class() { std::cout << "dtor" << std::endl; } }; template <class ComparisonFunctor> void sort(ComparisonFunctor c) { std::cout << "sort" << std::endl; } void main() { sort(compare_class()); } -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 119.77.201.177 ※ 編輯: mingtai1 來自: 119.77.201.177 (03/26 01:12)
loveme00835:copy ctor 也測一下吧 03/26 01:24
loveme00835:比較複雜的algorithms也可能需要用到copy assignment 03/26 01:24
diabloevagto:functor用lambda代替會比較好嗎? 03/26 20:01
※ 編輯: mingtai1 來自: 119.77.201.177 (03/27 00:38)
mingtai1:加了copy ctor,dtor次數就只剩下1次了,不過卻沒印出copy 03/27 00:39
mingtai1:ctor的訊息, 很詭異. 有大大知道原因嗎 ? 03/27 00:40
mingtai1:應該問說, 為什麼加了copy ctor, dtor就只會出現一次才對 03/27 00:42
loveme00835:你最後的碼長怎樣? 03/27 00:51
mingtai1:最後碼我再回下一篇文貼上 03/27 00:56
loveme00835:你用置底文網站貼吧, 只要一個推文就夠了... 03/27 01:28
mingtai1:貼上了,不好意思不太熟@@ http://codepad.org/K1EAMdJp 03/27 22:47