内存基本处理工具

内存基本处理工具

     STL定义五个全局函数,作用于未初始化窨上。这样的功能对于窗口的实现很有帮助,用于 构造的constrcut()函数和用于析构的destroy(),另三个函数是 uninitialized_copy(),是uninitialized_fill(),uninitialized_fill_n()分别对应于高导次函数copy(),fill(),fill_n() 这些都是STL,前三个低层次函数的使用应该包含<memory>
    construct()接受一个指针p和一个初值value,该函数的用途就是将初值设定到指定的空间上。C++的placement new运算子来完成这一任务, construct与new不同,construct是在没有初始化的内存上构造新对象,而new一经分配内存必须进行初始化
      
#include < iostream >
#include
< vector >
using   namespace  std;
class  A
{
    
public:
        A(
int a){cout<<"A"<<endl;}
}
;
int  main()
{
    A 
*a;
//    a=new A;//new分配内存后必须构造
    a=new A(1);
    vector
<A> B;//由此说明vector使用的是内存分配与对象构造相分离的技术即预分配技术
    system("pause");
    
return 0;
}

   destory()有两个版本,第一版本接受一个指针,准务将该指针所指之物析构掉。这很简单,直接调用该对象的构构函数即可。第二版本接受first和last两个迭代器,准备将两个迭代器内的所有对象都析构掉。我们不知道这个范围有多大,万一很大,而每个对象的析构函数都无关痛痒(所谓trivial destructor),那么一次次调用这些无关痛痒的函数对效率是一种伤害。首先利用value_type()获得迭代器所指对象的型别,再利用_type_trait<T>判断该型别的析构函灵敏是否无关痛痒。叵是(_true_type),则什么也不做就结束;若否(_false_type),这才以循环方式巡访整个范转,并在循环中每经历史潮流个对象就调用第一个版本的destory

你可能感兴趣的:(内存基本处理工具)