現時点では、C++11 の機能に慣れようとしています。私が自発的に気に入ったのは、スマート ポインターです。特にshared_ptr
. ただし、通常のポインターを shared_ptr に割り当てることは許可されていないようです。例えば
typedef shared_ptr<string> StringPtr
...
StringPtr x;
...
x = new string("bla");
少なくとも VC2010 では失敗します。もちろんshared_ptr::operator=
、テンプレート引数型の通常のポインターのオーバーロードが欠落しているインターフェイスを見ると、これを理解できます。これで、コンストラクターを明示的にshared_ptr
使用して、通常のポインターからa を作成できます。shared_ptr
x = StringPtr(new string("bla"));
しかし、私の意見では、これは冗長で直感に反しています。通常のポインタをスマートポインタに代入するとき、プログラミングの意図を可能な限り表現したと思います。構文を追加すると、読みやすさが損なわれますが、明確になることはありません。もちろん、すでに「所有されている」通常のポインターをスマートポインターに割り当てないのは私次第ですが、それで...
読みやすさを回復しようとしているときに、私はmake_shared<>
. しかし、再びライン
x = make_shared<string>("bla");
上記のスマート ポインターの明示的な構成よりもはるかに読みやすくコンパクトではありません。もちろん、パフォーマンスは少し良くなるかもしれませんが、それは私が求めているものではありません. したがって、関数テンプレート make_shared をインスタンス化して、shared_ptr の場合と同様にエイリアスを作成することを意図していました。でも明らかに
typedef make_shared<string> NewString
はまったく有効ではありません。だから私の質問は:どうすれば次のようなものを書くのに近づくことができますか?
x = NewString("bla");
?