C++动态对象创建
C++动态创建对象
构造函数不允许我们向他传递内存地址来进行初始化?
在堆上创建对象要确保构造函数调用。
1.对象创建
创建一个C++对象时:
1.为对象分配内存。
2.调用构造函数初始化内存。
碰到{,存储单元就在栈上被创建(C语言需要在头部申明变量原因?)
3种分配内存的方法:
1.静态分配
2.堆分配
3.栈分配
malloc分配一块内存后,返回void*指针
构造函数不能被显式调用,而是由编译器在创建对象时调用,每一个对象在创建后必须先进行初始化。
new
MyType *fp = new MyType(1,2);MyType *fp = new MyType;
构造函数有参数时,动态创建对象的方法,new有内置的长度计算,类型转换和安全监察
delete
delete fp;
先调用析构函数,再调用free(),只用于删除new创建的对象
运算符重载,友元,内联函数
2.例子
delete type;
type指向一个object类,则object类的析构函数会被调用,delete一个void*类型,则只会释放内存。
一个类有指针类型,则指针所指的对象并不是的内存并不算在类内,也就是说,delete type;,并不释放类中指针所指向的内存。
3.用于数组的new和delete
delete []point;对象数组的整体,调用析构函数并释放内存
int const* q = new int[10]; or
const int* q = new int[10];
都可把const和指针指向的int捆绑在一起
4.内存已耗尽
new()找不到足够大的内存空间时,new-handler函数被调用,该函数默认动作是产生一个异常(throw an exception),用错误信息(内存耗尽)待地new-handler,并异常中断程序,抛出对应错误
一个实例代码:
#include <iostream>
#include <cstdlib>
#include <new>
using namespace std;
int count = 0;
void out_of_memory()
{
cerr << "memory exhausted after" << count << "cllocations" << endl;
exit(1);
}
int main()
{
set_new_handler(out_of_memory);
while(1){
count++;
new int[1000];
}
}
5.new和delete的重载
cin,cout