cii-font-family: Verdana; mso-hansi-font-family: Verdana;">当c++cii-font-family: Verdana; mso-hansi-font-family: Verdana;">程序用new/class="tags" href="/tags/DELETE.html" title=delete>deletecii-font-family: Verdana; mso-hansi-font-family: Verdana;">运算符进行动态内存操作时c;class="tags" href="/tags/CLASS.html" title=class>class="tags" href="/tags/BianYiQi.html" title=编译器>编译器为我们准备了两项class="tags" href="/tags/GongZuo.html" title=工作>工作。一是c;调用全局内存分配函数 operator new() / operator class="tags" href="/tags/DELETE.html" title=delete>delete()cii-font-family: Verdana; mso-hansi-font-family: Verdana;">; cii-font-family: Verdana; mso-hansi-font-family: Verdana;">二是c;调用 cii-font-family: Verdana; mso-hansi-font-family: Verdana;">“构造函数”和“析构函数”。
cii-font-family: Verdana; mso-hansi-font-family: Verdana;">下面举个例子说明:
color: blue; font-family: Verdana;" lang="EN-US">class="tags" href="/tags/CLASS.html" title=class>class TestType
color: blue; font-family: Verdana;" lang="EN-US">{
color: blue; font-family: Verdana;" lang="EN-US">public:
color: blue; font-family: Verdana;" lang="EN-US">TestType(){}
color: blue; font-family: Verdana;" lang="EN-US">~TestType(){}
color: blue; font-family: Verdana;" lang="EN-US">private:
color: blue; font-family: Verdana;" lang="EN-US">cerun: yes;"> int m_test;
color: blue; font-family: Verdana;" lang="EN-US">}
color: blue; font-family: Verdana;" lang="EN-US">TestType* ttData = new TestType();
cii-font-family: Verdana; mso-hansi-font-family: Verdana;">对于这里的newcii-font-family: Verdana; mso-hansi-font-family: Verdana;">分配内存c;
(1) cii-font-family: Verdana; mso-hansi-font-family: Verdana;">class="tags" href="/tags/CLASS.html" title=class>class="tags" href="/tags/BianYiQi.html" title=编译器>编译器调用operator new(sizeof(TestType)) cii-font-family: Verdana; mso-hansi-font-family: Verdana;">分配内存。
(2) cii-font-family: Verdana; mso-hansi-font-family: Verdana;">class="tags" href="/tags/CLASS.html" title=class>class="tags" href="/tags/BianYiQi.html" title=编译器>编译器调用TestType ::TestType()cii-font-family: Verdana; mso-hansi-font-family: Verdana;">构造函数c;构造对象。
color: #0000ff;">class="tags" href="/tags/DELETE.html" title=delete>delete ttData;
color: #0000ff;">ttData = Null;
cii-font-family: Verdana; mso-hansi-font-family: Verdana;">对于这里内存释放:
(1) cii-font-family: Verdana; mso-hansi-font-family: Verdana;">class="tags" href="/tags/CLASS.html" title=class>class="tags" href="/tags/BianYiQi.html" title=编译器>编译器首先调用TestType ::~TestType()cii-font-family: Verdana; mso-hansi-font-family: Verdana;">c;释放成员对象的资源。
(2) cii-font-family: Verdana; mso-hansi-font-family: Verdana;">class="tags" href="/tags/CLASS.html" title=class>class="tags" href="/tags/BianYiQi.html" title=编译器>编译器调用 operator class="tags" href="/tags/DELETE.html" title=delete>delete(ttData)cii-font-family: Verdana; mso-hansi-font-family: Verdana;">释放内存。
cerun: yes;"> bbgcii-font-family: Verdana; mso-hansi-font-family: Verdana;">中的容器可以放置任何用户自定义类型c;但是我们之前提供的color: fuchsia; font-family: Verdana;" lang="EN-US">simple_alloc cii-font-family: Verdana; mso-hansi-font-family: Verdana;">和color: fuchsia; font-family: Verdana;" lang="EN-US">alloc_poolcii-font-family: Verdana; mso-hansi-font-family: Verdana;">只有释放和分配内存c;没有调用具体类的构造函数和析构函数。还好c++cii-font-family: Verdana; mso-hansi-font-family: Verdana;">提供了“定制newcii-font-family: Verdana; mso-hansi-font-family: Verdana;">特性”(喜欢c++cii-font-family: Verdana; mso-hansi-font-family: Verdana;">就是因为它的灵活)可以满足我们的目的c;即在已有内存空间上调用具体类的构造函数。定制newcii-font-family: Verdana; mso-hansi-font-family: Verdana;">的语法如下:
color: blue; font-family: Verdana;" lang="EN-US">void * ttData = operator new(sizeof(TestType);
color: blue; font-family: Verdana;" lang="EN-US">new(ttData) TestType(); //cii-font-family: Verdana; mso-hansi-font-family: Verdana;">定制newcii-font-family: Verdana; mso-hansi-font-family: Verdana;">c;在指针ttDatacii-font-family: Verdana; mso-hansi-font-family: Verdana;">所指内存上调用 TestTypecii-font-family: Verdana; mso-hansi-font-family: Verdana;">的构造函数
cii-font-family: Verdana; mso-hansi-font-family: Verdana;">
cii-font-family: Verdana; mso-hansi-font-family: Verdana;"> 对于内存空间的释放c;我们则可以通过显式调用析构函数完成。如c;
cii-font-family: Verdana; mso-hansi-font-family: Verdana;">color: #0000ff;">ttData->~TestType();
cii-font-family: Verdana; mso-hansi-font-family: Verdana;">具体源码: