【发布时间】:2017-07-17 02:51:11
【问题描述】:
在C++ Primer 5th中,我看到过这样的事情:
shared_ptr<T> p(p2,d)p 是shared_ptr p2的副本,除了 p 使用可调用对象 d 代替delete
但是当我测试它时:
#include <memory>
#include <iostream>
class DebugDelete {
public:
DebugDelete(std::ostream &o = std::cerr) : os(o) {}
template <typename T> void operator()(T *p) const
{
os << "delete unique_ptr" << std::endl;
delete p;
}
private:
std::ostream &os;
};
int main()
{
std::shared_ptr<int> sptr, sptr1(sptr, DebugDelete());
}
我引用的内容似乎有误,sptr1(sptr, DebugDelete()) 不起作用,但 sptr1(new int(42), DebugDelete()) 效果很好。
那么是否允许像 C++ Primer 5th 中那样使用shared_ptr 和删除器来构造share_ptr?
谢谢。
【问题讨论】:
-
如果有一个构造函数采用
shared_ptr和一个自定义删除器,那么您可以让两个不同的shared_ptrs 共享同一个对象的所有权,但使用两个不同的删除器。销毁对象时应该使用哪个? -
@aschepler 很好地解释了为什么不能像这样构造
shared_ptr。
标签: c++ c++11 shared-ptr