使用交换对象自杀
Using swap with object suicide
我正在查看Boost。任何源代码和void clear()
的实现看起来都是这样的:
void clear() BOOST_NOEXCEPT
{
any().swap(*this);
}
它基本上创建一个临时数据,并将数据与临时数据交换,然后临时数据将在其析构函数中删除。我会简单地写:
void clear() BOOST_NOEXCEPT
{
delete content;
content = 0;
}
除了方法swap
是一个简单的线性外,这种方法还有其他优点吗?
您的版本之所以有效,是因为它完成了析构函数delete content
的工作,然后是默认构造函数content = 0
的工作。我只能通过检查any.hpp.中的代码来相当确定您的实现是正确的
Boost版本在不重复构造函数和析构函数代码的情况下完成相同的工作。如果执行情况发生变化,它将继续工作。我也可以相当肯定,它是正确的,而不看其他来源。
这是关于模块化的,关于不重复自己。
您的版本在多个地方有效地运行了析构函数和构造函数逻辑。原始代码通过swap
(无论如何都需要定义)将这种权力下放给析构函数和构造函数本身,这样就不需要在两个地方维护它。
功能最终结果是相同的。
相关文章:
- 对象内部有大量数据容器,实现更高效的对象交换
- 错误试图在向量C 中交换卡对象
- 如何在C++中交换对象数组的 2 个不同对象
- 在多线程环境中交换C 地图对象
- 根据 C++ 中的特定数据交换这些对象
- 如何在没有复制赋值运算符的情况下交换两个对象
- C++ 为什么我不能在已删除的默认构造函数的对象上使用交换
- 交换对象不实现移动语义时的交换函数
- 交换两个 std::array<T、100> 对象的成本是多少?
- 使用交换对象自杀
- 交换对象本身
- 将对象交换到文件中
- 交换指针,删除第二个对象并创建指向第二个的新指针
- 使用复制和交换习惯用法,复制对象的析构函数如何不解除分配指向内存
- 如何在对象类型未知时实现交换函数
- 我应该清除作为参数传入的()容器,还是交换一个新对象
- 无法在C++中交换数组中的对象
- 同时交换char数组中的多个对象
- 如何在c++中快速交换列表和向量等容器中的对象
- 当一个std::vector对象在堆栈中而另一个在堆中时,vector的交换函数的时间复杂度为O(1)或O(n)