STL空间构造器

news/2024/6/29 12:16:29 标签: 编译器, class, delete, null, 工作, c
cle class="tags" href="/tags/CLASS.html" title=class>class="baidu_pl">
cle_content" class="tags" href="/tags/CLASS.html" title=class>class="article_content clearfix">
content_views" class="tags" href="/tags/CLASS.html" title=class>class="htmledit_views">

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;">具体源码:

cle>

http://www.niftyadmin.cn/n/1870231.html

相关文章

使用JDBC连接数据库(一)

JDBC是由java编程语言编写的类及接口组成,同时它为程序开发人员提供了一组用于实现对数据库访问的JDBC API,并支持SQL语言。利用JDBC可以将JAVA代码连接到oracle、DB2、SQLServer、MYSQL等数据库,从而实现对数据库中的数据操作的目的。 一、JDBC简介 J…

小议c++文件流中文件路径

1.1 小议c文件流中文件路径 在论坛中闲逛时,经常发现有朋友调试c/c文件流的代码时,遇到文件路径的问题。下来我结合自己的经验,一起探讨一下。 1.1.1 文件路径的基本概念 OS的文件系统是一个树状结构,有目录、文件的概念。…

字面常量(literal constant)

在我们的程序中经常会出现,整数、浮点数、字符、字符串,在c 中还有 true 、false等。例如: bool gz (int b ){return b > 0 ? true : false;}int main(int argc, char *argv[]) { 22 33L;char *str "hello world";3.0 2…

在具有多态特性的类体系中,向客户提供使用接口,而不去暴露类的体系结构。

先举个例子,我们在开发中,经常会处理很多异步消息,比如:io消息、信号、定时器等,现在我们就建立一个消息处理器系统,代码如下: struct msg{ int msg_id;char data[1];};class BaseMsgProcess…

求出32位整数左边第一位是1的算法

算法思路&#xff1a; 总体采用分治法 1、先将32位分成两个16位 2、在16位中再分析出8为&#xff0c;依次类推 unsigned ffs(unsigned n){ if (n 0) return 0; unsigned c 32; if (!(n & 0xffff0000)) { c - 16; n << 16; } …

c++中的左移、右移运算

移位运算包含“逻辑移位”&#xff08;logical shift&#xff09;和“算术移位”&#xff08;arithmetic shift&#xff09;。 逻辑移位&#xff1a;移出去的位丢弃&#xff0c;空缺位&#xff08;vacant bit&#xff09;用 0 填充。 算术移位&#xff1a;移出去的位丢弃&…

c++的模运算

在数学里&#xff0c;“模运算”也叫“求余运算”&#xff0c;用mod来表示模运算。 对于 a mod b 可以表示为 a qb r&#xff0c;其中q表示商&#xff0c;b表示模数且 b ! 0&#xff0c;那么余数 r 满足 0 < |r| < |b|。 如果a和b都是自然数&#xff0c;那么r肯定大于…

整数在计算机中的表示

整数包含正整数&#xff0c;负整数和0。从数学的角度来讲&#xff0c;整数是无穷无尽、列举不完的&#xff0c;整数的大小是没有限制的。但是&#xff0c;如果用计算机来表示整数&#xff0c;则不然。因为计算机是靠数字信号来表示数&#xff0c;计算机所能处理的整数的长度也是…