堆内存 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的析构函数也被调用。
原文:http://www.cnblogs.com/WJR12/p/5042891.html