代码改变世界

C语言内存管理

2015-12-13 15:37  AB小博客  阅读(154)  评论(0)    收藏  举报

堆内存 heap 手动管理  (new copy)

栈内存 stack 系统自动管理

//
//  main.m
#import <Foundation/Foundation.h>
#import "Person.h"
int main(int argc, const char * argv[]) {
    @autoreleasepool {
     //1.C语言内存管理
        char *str;
        str = (char*)malloc(100*sizeof(char)); //heap 堆内存里面申请空间
        //数组
        free(str);//释放内存
        //calloc realloc
        //2.C++
     //   Person p1;//stack 栈内存里面 自动管理
        Person *p2 = new Person(); //new 在heap堆内存里面
        delete p2;//手动释放
        
    }
    return 0;
}
//
//  Person.cpp


#include "Person.h"
void Person::showMsg(){
   
    cout<<"dwadaw"<<endl;
    
}
//
//  Person.h

#ifndef Person_h
#define Person_h

#include <stdio.h>
#include <iostream>
using namespace std;
class Person{
public:
    void showMsg();
    Person(){
        cout<<"我是构造函数"<<endl; 
    }
    ~Person(){
        cout<<"我是析造函数"<<endl;
    }
};


#endif /* Person_hpp */
在对象被创建的时候就会调用构造函数,比如 声明一个类class A{...},当你在main函数中
A a ; 定义一个对象a的时候, 就调用构造函数,默认构造函数都是无参数的 ,构造函数就相当给对象a初始化而已,

析构函数在下边3种情况时被调用:
1.对象生命周期结束,被销毁时;
2.delete指向对象的指针时,或delete指向对象的基类类型指针,而其基类虚构函数是虚函数时;
3.对象i是对象o的成员,o的析构函数被调用时,对象i的析构函数也被调用。