C++编程思想(第二版) 13章《动态对象创建》
一、创建一个C++对像时发生 1、为对象分配内存 2、调用构造函数初始化那块内存
=========
程序的内存区域:
一个程序的内存空间有几下几部分
二、malloc/free
在C中使用malloc在堆上分配一块内存区域,返回一个void的指针,指向分配的内存块,仅是分配内存。
有可能返回0,分配失败。
三、new/delete
C+ +使用new来创建一个对象。它先在堆上分配一块内存空间(一般是调用malloc),然后调用该对象的构造函数来初始化。 new操作在调用对象的构造函数之前会检查是否分配成功,如果内存分配失败,它会调用new-handler这个特殊函数,它默认的动作是抛一个异常。用delete来删除一个对象,并释放其内存空间。它先调用该对象的析构函数,然后再释放内存(一般是调用free)
四、删除指针
这个问题前几天在CSDN上看到一篇讨论是在delete 指针前,是否需要判断指针是否为空。
C++编程思想(P308)提到: 如果正在删除的对象的指针是0,则不发生任何事情。为此,人们经常建议在删除指针后立即把指针赋值为0以免对其第二次删除。对一个对象删除两次可能会产生某些问题。
一、创建一个C++对像时发生 1、为对象分配内存 2、调用构造函数初始化那块内存
=========
程序的内存区域:
一个程序的内存空间有几下几部分
- 代码区存放各个函数代码块
- 全局数据区存放全局变量数据和静态变量数据。
- 堆区动态分配数据
- 栈区存放程序的局部变量数据。 也就是在函数体内定义的变量。
二、malloc/free
在C中使用malloc在堆上分配一块内存区域,返回一个void的指针,指向分配的内存块,仅是分配内存。
有可能返回0,分配失败。
void *malloc(
size_t size
);
调用free来释放己分配的内存对象。
size_t size
);
void free(
void *memblock
);
free的参数是malloc分配返回的指针变量。
void *memblock
);
三、new/delete
C+ +使用new来创建一个对象。它先在堆上分配一块内存空间(一般是调用malloc),然后调用该对象的构造函数来初始化。 new操作在调用对象的构造函数之前会检查是否分配成功,如果内存分配失败,它会调用new-handler这个特殊函数,它默认的动作是抛一个异常。用delete来删除一个对象,并释放其内存空间。它先调用该对象的析构函数,然后再释放内存(一般是调用free)
四、删除指针
这个问题前几天在CSDN上看到一篇讨论是在delete 指针前,是否需要判断指针是否为空。
if (p != NULL)
delete p;
delete p;
if (p != NULL) {
delete p;
p = NULL;
}
delete p;
p = NULL;
}
delete p;
p = NULL;
p = NULL;
C++编程思想(P308)提到: 如果正在删除的对象的指针是0,则不发生任何事情。为此,人们经常建议在删除指针后立即把指针赋值为0以免对其第二次删除。对一个对象删除两次可能会产生某些问题。