我一直看到與原始指針使用智能指針reset
功能。當我嘗試傳遞另一個智能指針時,它失敗。我看了這裏:http://en.cppreference.com/w/cpp/memory/shared_ptr/reset 但它沒有多說這個。只是想確認是否屬於這種情況?我的代碼是在這裏:https://wandbox.org/permlink/xKNtJhjGeOSZS7KN 這裏還爲您提供方便:shared_ptr :: reset只適用於原始指針?
#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 *'作爲參數.... – user463035818
哦,我以爲你可以傳遞一個智能指針,一個原始指針?還是沒有隱式轉換?對不起,我從來沒有使用過智能指針。我認爲這是情況(雖然沒有隱式轉換),謝謝! @ tobi303 - 你想回復那個,所以我可以接受你的答案? :) – pss