ric*_*eek 5 c++ std language-lawyer 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);
};
Run Code Online (Sandbox Code Playgroud)
在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
}
Run Code Online (Sandbox Code Playgroud)
我想知道
std::make_shared是一件好事我正在使用GCC 4.8.0,我检查了-std = c ++ 11和-std = c ++ 1y标志.
不要将make_shared调用放入初始化列表中,只需进行正常的初始化:
const std::shared_ptr<MyClass> d = std::make_shared<MyClass>();
Run Code Online (Sandbox Code Playgroud)
至于第二件事,如果您不指定删除程序,那么它将是默认删除程序。