自定义 std::shared_ptr 个删除器
customize std::shared_ptr deleter
在 C++ Primer 5th 中,我看到了这样的内容:
shared_ptr<T> p(p2,d)
p is a copy of the shared_ptr p2
except that p uses that p uses the callable object d in place of 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
?
谢谢。
对于编译的情况:
std::shared_ptr<int> sptr, sptr1(new int(42), DebugDelete());
它使用了第四个构造函数:
template< class Y, class Deleter > shared_ptr( Y* ptr, Deleter d );
(4)
对于您提到的另一种情况:
std::shared_ptr<int> sptr, sptr1(sptr, DebugDelete());
它不能使用这个构造函数,因为你传递的不是指针,而是另一个 shared_ptr
对象。
继续往下看,none 个构造函数与此处的参数匹配,因此您最终会遇到编译错误。该代码不符合标准,这让我相信它与书中的内容略有不同。
在 C++ Primer 5th 中,我看到了这样的内容:
shared_ptr<T> p(p2,d)
p is a copy of theshared_ptr p2
except that p uses that p uses the callable object d in place ofdelete
但是当我测试它时:
#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
?
谢谢。
对于编译的情况:
std::shared_ptr<int> sptr, sptr1(new int(42), DebugDelete());
它使用了第四个构造函数:
template< class Y, class Deleter > shared_ptr( Y* ptr, Deleter d );
(4)
对于您提到的另一种情况:
std::shared_ptr<int> sptr, sptr1(sptr, DebugDelete());
它不能使用这个构造函数,因为你传递的不是指针,而是另一个 shared_ptr
对象。
继续往下看,none 个构造函数与此处的参数匹配,因此您最终会遇到编译错误。该代码不符合标准,这让我相信它与书中的内容略有不同。