boost::optional を scoped_ptr として使用するのが一般的ではないのはなぜですか。オブジェクトがヒープではなくスタック上に作成されるため、より良いようです。しかし、私はそれがこのように使用されているのを見たことがありません。私の質問は、boost::optional を一種の scoped_ptr として使用することの欠点は何ですか?
2 に答える
3
その理由は、ポリモーフィズムがのポイントだからscoped_ptr
です。それ以外の場合は、変数をスタック上でローカルに宣言するだけです。
int main()
{
Class object(52, 25); //sample declaration, with constructor arguments passed
}
編集 1 (コメントからの追加情報への応答):
boost::scoped_ptr
実際には、説明した目的で使用されることはめったにありません(主に、コピーも移動もできないためboost::scoped_ptr
、保存するクラスをコピー不可および移動不可にするためです)。boost::optional
その目的には適しているようですが...
boost::optional
スタック上に自由にオブジェクトを作成できるため、をローカルで使用する (つまり、関数から返されない)ことにはほとんど意味がないことに注意してください。
void another_function()
{
if(some_condition())
{
Class object(0, 0); // create the object
// use the object
}
else
{
// don't use the object
}
}
于 2014-03-25T13:49:19.717 に答える