私はいつもスマートポインタreset
関数が生ポインタで使われているのを見てきました。別のスマートポインタを渡そうとすると失敗します。私はここで見た:http://en.cppreference.com/w/cpp/memory/shared_ptr/reset しかし、これについてはあまり言わない。これが事実であるかどうか確認したいだけですか?私のコードはここにある:https://wandbox.org/permlink/xKNtJhjGeOSZS7KN またここにあなたの便宜のために:shared_ptr :: resetはrawポインタでのみ動作しますか?
#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