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

why not use boost::optional as a better scoped_ptr

本文关键字:scoped ptr 更好 boost optional 为什么不      更新时间:2023-10-16

为什么不经常使用boost::optional作为scoped_ptr,它似乎是更好的,因为对象是在堆栈上而不是堆上创建的。但我从未见过它这样被使用过。我的问题是,使用boost::optional作为一种scoped_ptr,除了明显无法执行多态性之外,还有什么缺点?

原因是多态性 scoped_ptr的点。否则就只能在栈上局部声明变量。

int main()
{
    Class object(52, 25); //sample declaration, with constructor arguments passed
}

EDIT 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
    }
}

首先,我认为是语义。

我需要刷新我对boost::optionalboost::scoped_ptr细节的记忆来给出技术方面的意见,但是当涉及到可维护性时,使用optional s代替指针势必会让阅读你的代码的人感到困惑。