作者热门文章
- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
作为前向声明的重度用户,我喜欢我的类在销毁时完成。为确保这一点,我将析构函数设为私有(private)并与 boost::checked_delete
成为 friend :
#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
}
我想知道
std::make_shared
的使用是一件好事我使用的是 GCC 4.8.0,我检查了 -std=c++11 和 -std=c++1y 标志。
最佳答案
像这样的东西应该可以工作:
struct wrapper;
struct MyClass
{
private:
~MyClass() { /* something */ }
friend wrapper;
};
struct wrapper
{
MyClass obj;
};
// ...
auto const tmp = std::make_shared<wrapper>();
std::shared_ptr<MyClass> p(tmp, &tmp->obj);
关于C++11 替代 boost::checked_delete,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22091559/
我不明白 boost::checked_delete 的目的。文档说: The C++ Standard allows, in 5.3.5/5, pointers to incomplete clas
作为前向声明的重度用户,我喜欢我的类在销毁时完成。为确保这一点,我将析构函数设为私有(private)并与 boost::checked_delete 成为 friend : #include st
所以我在查看一些 boost 源代码时发现了这个: (来自 ) template inline void checked_delete(T * x) { // intentionally co
我想在存储自身实例的特定类中使用 boost::ptr_map。但是,请考虑以下示例: #include #include class foo { friend void boost::c
我是一名优秀的程序员,十分优秀!