SGI

销毁

类别: 分配器 组件类型: 函数

原型

销毁是一个重载名称;实际上有两个销毁函数。
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++ 标准的一部分;它们存在于早期草案中,并且在该实现中保留以实现向后兼容性。

类型要求

对于第一个版本的销毁: 对于第二个版本的销毁:

先决条件

对于第一个版本的销毁: 对于第二个版本的销毁:

复杂度

第二个版本的运行时复杂度是线性的:它准确地调用了析构函数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
[Silicon Surf] [STL Home]
Copyright © 1999 Silicon Graphics, Inc. 保留所有权利。 商标信息