1

boost::optional を scoped_ptr として使用するのが一般的ではないのはなぜですか。オブジェクトがヒープではなくスタック上に作成されるため、より良いようです。しかし、私はそれがこのように使用されているのを見たことがありません。私の質問は、boost::optional を一種の scoped_ptr として使用することの欠点は何ですか?

4

2 に答える 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 に答える