销毁
|
|
类别: 分配器 |
组件类型: 函数 |
原型
销毁是一个重载名称;实际上有两个销毁函数。template <class T> void destroy(T* pointer);
template <class ForwardIterator>
void destroy(ForwardIterator first, ForwardIterator last);
描述
在 C++ 中,运算符delete通过调用对象的析构函数来销毁对象,然后释放存储该对象的内存。但是,有时将这两个操作分开是有用的。 [1]销毁调用对象的析构函数,但不释放存储对象的内存。第一个版本的销毁销毁指向指针的对象,方法是调用析构函数T::~T(). 指向指针的内存不会被释放,可以被其他对象复用。
第二个版本的销毁销毁元素范围内的所有对象[first, last). 等同于调用destroy(&*i),针对范围内的每个迭代器i。[first, last).
定义
定义在标准头文件 memory 中,以及非标准向后兼容头文件 algo.h 中。这些销毁算法不再是 C++ 标准的一部分;它们存在于早期草案中,并且在该实现中保留以实现向后兼容性。类型要求
对于第一个版本的销毁:
对于第二个版本的销毁:
-
ForwardIterator是 前向迭代器 的模型。
-
ForwardIterator是可变的。
-
ForwardIterator的值类型具有可访问的析构函数。
先决条件
对于第一个版本的销毁:
对于第二个版本的销毁:
-
[first, last)的有效对象。
- 是一个有效范围。i中的每个迭代器[first, last)指向一个有效对象。
复杂度
第二个版本的运行时复杂度是线性的:它准确地调用了析构函数last - first次。例子
class Int {
public:
Int(int x) : val(x) {}
int get() { return val; }
private:
int val;
};
int main()
{
Int A[] = { Int(1), Int(2), Int(3), Int(4) };
destroy(A, A + 4);
construct(A, Int(10));
construct(A + 1, Int(11));
construct(A + 2, Int(12));
construct(A + 3, Int(13));
}
注释
[1] 特别是,销毁,以及其他低级内存分配原语,用于实现容器类。
另请参阅
分配器, 构造, uninitialized_copy,
uninitialized_fill, uninitialized_fill_n,
raw_storage_iterator
Copyright © 1999 Silicon Graphics, Inc. 保留所有权利。
商标信息