作为前向声明的重要用户,我喜欢我的类在销毁时完成。为了确保这一点,我做的析构函数的私人和笼络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