为什么不使用boost :: optional作为更好的scoped_ptr

时间:2014-03-25 13:41:31

标签: c++ boost boost-optional

为什么使用boost :: optional作为scoped_ptr并不常见,因为在堆栈而不是堆上创建对象似乎更好。但我从来没有见过这种方式。我的问题是,使用boost :: optional作为一种scoped_ptr除了明显无法进行多态之外有什么缺点?

2 个答案:

答案 0 :(得分:2)

首先,我会说语义。

我需要在boost::optionalboost::scoped_ptr详细信息上刷新我的记忆,以便就技术方面发表意见,但在可维护性方面,使用optional代替指针必然会使阅读代码的人感到困惑。

答案 1 :(得分:2)

原因是多态 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
    }
}