作爲前向聲明的重要用戶,我喜歡我的類在銷燬時完成。爲了確保這一點,我做的析構函數的私人和籠絡boost::checked_delete
:C++ 11替代boost :: checked_delete
#include <boost/checked_delete.hpp>
struct MyClass
{
//MyClass's interface
private:
~MyClass() { /* something */ }
friend void boost::checked_delete<>(MyClass* x);
};
在C++ 11,std::default_delete
還檢查了在破壞完整性。不過,我無法實現相同的行爲上面:
#include <memory>
struct MyClass
{
//MyClass's interface
private:
~MyClass() { /* something */ }
friend struct std::default_delete<MyClass>;
};
int main()
{
//const std::shared_ptr<MyClass> d {
// std::make_shared<MyClass>()
//}; //(1) Should compile?
const std::shared_ptr<MyClass> d(
new MyClass,std::default_delete<MyClass>()
); //(2) Does compile
}
不知
- 我怎樣才能標註爲(1)編譯行?使用
std::make_shared
是好事 - 是否標記(2)的行真的有效?感覺不好明確指定刪除程序
我使用的是GCC 4.8.0,我檢查了-std = C++ 11和-std = C++ 1y標誌。
什麼你在這方面的意思是「完全」嗎?你能否舉一個例子說明你的「班完成」或「班不完整」是指銷燬?謝謝。 – utnapistim
歡迎來到Stack Overflow。這是一個很好的第一個問題,我已經稍微編輯了一下,包括刪除結尾處的'Thanks,Richel Bilderbeek'。請參閱http://meta.stackexchange.com/questions/2950/should-hi-thanks-taglines-and-salutations-be-removed-from-posts。 – jerry
刪除不完整類型時,GCC是否發出警告/錯誤?在VC 2013下,我遇到了raw /'shared_ptr'(可以通過正確的選項升級爲錯誤)和static'assertion failure with'unique_ptr'的警告。 – user2802841