我正在查看Boost.Any source code,void clear()
的实现如下所示:
void clear() BOOST_NOEXCEPT
{
any().swap(*this);
}
它基本上创建了一个临时数据并用临时数据交换数据,然后临时数将在它的析构函数中删除。我会简单地写一下:
void clear() BOOST_NOEXCEPT
{
delete content;
content = 0;
}
除了方法swap
是简单的单行之外,这种方法还有其他优点吗?
答案 0 :(得分:3)
您的版本之所以有效,是因为它完成了析构函数的工作 - delete content
- 然后是默认构造函数的工作 - content = 0
。通过检查any.hpp中的代码,我只能相当确定您的实现是否正确。
Boost版本执行相同的工作,而不重复构造函数和析构函数的代码。如果实施改变,它将继续工作。我也可以相当肯定,如果没有查看其他来源,它是正确的。
答案 1 :(得分:2)
这是关于模块化,而不是重复自己。
您的版本在多个位置有效地运行析构函数和构造函数逻辑。原始代码通过swap
(无论如何需要定义)将权力转移到析构函数和构造函数本身,这样您就不需要将它保存在两个位置。
功能结果是一样的。