2
割り当てられたshared_ptr変数を返す関数を作成する必要があります。これは正しい方法ですか?関数にshared_ptrを割り当てます。
typedef boost::shared_ptr<std::vector<char> > sharePtr;
void createPtr(sharePtr &p)
{
p = sharePtr(new std::vector<char>);
}
void test()
{
sharePtr p;
createPtr(p);
}
'make_shared'は、オブジェクトが大きい場合(' vector'はそうでない場合)、weakポインタ(このコードではありません)を使用している場合、 'make_shared'はそれが価値のあるものよりも多くのメモリを無駄にすることはありません。私はそれを言いたいと思った。 –
@ Steve:同意します。 counter-counter-recommendation: 'make_shared'は例外安全です。このコードでは何が問題になりません。一般的な実装では、オブジェクトが大きいかどうかをチェックし、その場合は2つの割り当てを行いますか? – ybungalobill
@ybungalobill:アイデアはありません。ほとんどのshared_ptrで制御されるオブジェクトは決して弱く参照されることは決してないので、make_sharedがそれを行うことは賢明ではないでしょうか。 –