【发布时间】:2017-11-03 17:29:20
【问题描述】:
我一直看到智能指针reset 函数与原始指针一起使用。当我尝试将另一个智能指针传递给它时,它失败了。我看了这里:http://en.cppreference.com/w/cpp/memory/shared_ptr/reset
但它并没有说太多。只是想确认是否是这种情况?我的代码在这里:https://wandbox.org/permlink/xKNtJhjGeOSZS7KN
也在这里为您提供方便:
#include<iostream>
using std::cout; using std::endl;
#include<memory>
using std::shared_ptr;
class Widget
{
public:
~Widget()
{
cout << "Hi from destructor" << endl;
}
};
auto wdel = [](Widget* pw)
{
cout << "Hi from custom deleter" << endl;
delete pw;
};
int main()
{
{
shared_ptr<Widget> pw(nullptr,wdel);
pw.reset(new Widget);
cout << "Done reset" << endl;
shared_ptr<Widget> pw2(nullptr,wdel);
// pw = pw2; // this works
pw2.reset(pw); // this does not work
}
return 0;
}
提前谢谢你。
【问题讨论】:
-
“[..] 但它并没有说太多”它说
reset将T*作为参数.... -
哦,我认为您可以将智能指针传递给期望原始指针的函数?还是没有隐式转换?抱歉,我以前从未使用过智能指针。我认为情况就是这样(没有隐式转换),谢谢! @tobi303 - 你想回复这样我可以接受你的回答吗? :)
标签: c++ c++11 pointers shared-ptr