C++類的實例有兩種,C#只有一種new的方式,有點不同。
先寫一個簡單的類:
class Apple{
public:
int weight;
};
方式一:
#include <iostream>
#include "Apple.h"
using namespace std;
void main(){
Apple apple;
apple.weight = 1;
cout<<apple.weight<<endl;
}
方式二:
#include <iostream>
#include "Apple.h"
using namespace std;
void main(){
Apple *apple = new Apple();
apple->weight = 2;
cout<<apple->weight<<endl;
}
可以看到,一種是直接聲明+實例(Class class),一種是用new關鍵字(Class class = new Class()),這兩者都可以實例類,但是它們之間有不同之處。方式一是系統自動分配內存,數據存放在棧上,並且由系統自動釋放(運行超出作用域自動刪除);方式二是手動申請內存,數據放在堆上,需要手動釋放。此外可以發現,方式一實例後得到的是引用,方式二實例後得到的是指針。
因此方式二比較完整的實例代碼爲:
#include <iostream>
#include "Apple.h"
using namespace std;
void main(){
Apple *apple = new Apple();
apple->weight = 2;
cout<<apple->weight<<endl;
delete apple;
apple = NUll;
}