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];
    }
}
View Code

 

       5.new和delete的重载
        cin,cout
                

posted @ 2013-06-04 21:03  长溪  阅读(968)  评论(0编辑  收藏  举报