为什么将 boost::optional 用作 scoped_ptr 并不常见,因为对象是在堆栈而不是堆上创建的,所以似乎更好。但我从未见过它以这种方式使用。我的问题是,除了明显无法进行多态性之外,使用 boost::optional 作为一种 scoped_ptr 的缺点是什么?
问问题
385 次
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 回答
2
一方面,我会说语义。
我需要刷新我的记忆boost::optional
和boost::scoped_ptr
细节才能对技术方面发表意见,但是在可维护性方面,使用optional
s 代替指针势必会使阅读您的代码的人感到困惑。
于 2014-03-25T13:45:53.163 回答