記憶體(new delete )
new
new 就是程式執行過程中申請空間的一種方式。你可以通過指標去訪問這個地址。
delete
delete:當你用完這個物件之後,把記憶體還給記憶體池的一種方式。
Dynamic Arrays(動態申請陣列)
int *p =new int ;
int *a=new int [10];
假設student 是個類
student *q =new student ();
student *r =new student[10]
delete p;
a++ ;delete[] a;
delete q;
delete[] r;
delete用法小建議:
1.禁止用delete釋放不是new分配出來的空間
2.禁止用delete兩次釋放同一塊空間
3.如果new[],那麼delete[]
4.如果new,那麼delete;
5.如果你去delete一個null pointer(空指標) ,那麼他是安全的。例子中的 int *b。
舉個例子:程式碼如下。
a.h
#ifndef A_H
#define A_H
class A
{
public:
A();
~A();
void setI(int i);
void f();
private:
int num;
int i;
int *b;
};
#endif // A_H
a.cpp
#include "a.h"
#include <QDebug>
A::A()
{
num=0 ;
i=0;
qDebug() << "進入建構函式" <<endl;
b=0;
}
A::~A(){
if(b)delete b; //最好加個if判斷
qDebug() << "進入解構函式, num ="+ QString::number(num) <<endl;
}
void A::setI(int i)
{
num=i;
//假設 private : int i;
//則 這句話變成 this->i =i;前面的i是私有變數i 後面的i是函式setI的引數,.
//this->i=i;
}
void A::f()
{
qDebug() << "HELLO" <<endl;
b=new int; //不管這個有沒有呼叫,沒呼叫就是一個空指標。我的建議第五點
}
main.cpp
#include "widget.h"
#include <QApplication>
#include <a.h>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
Widget w;//可以不用管
w.show();//可以不用管
A *p=new A[10];
for (int i=0;i<10;i++)
{
p[i].setI(i);
}
delete[] p;
return a.exec();
}
程式執行結果如下 :
如果主函式改成 delete p;
則只會顯示 “顯示解構函式,num =0;”說明有類陣列有沒被析構的。
***看完記得點個贊謝謝老闆。***
相關文章
- C++動態記憶體管理——new/deleteC++記憶體delete
- new、delete、記憶體分配 的底層原理delete記憶體
- C++記憶體管理:new / delete 和 cookieC++記憶體deleteCookie
- 如何檢測記憶體洩漏——過載new和delete記憶體delete
- 關於C++ delete 來釋放new分配的記憶體C++delete記憶體
- 軟體測試學習教程——過載new或delete來檢測記憶體洩漏delete記憶體
- linux中記憶體洩漏的檢測(三)定製化的new/deleteLinux記憶體delete
- C++ 記憶體分配(new,operator new)詳解C++記憶體
- return new物件造成溢位記憶體物件記憶體
- 【C++】C++ 記憶體分配(new,operator new)詳解C++記憶體
- 從預設解構函式學習c++,new,delete,記憶體洩漏,野指標函式C++delete記憶體指標
- 記憶體分配詳解 malloc, new, HeapAlloc, VirtualAlloc,GlobalAlloc記憶體
- array new 與 array deletedelete
- Golang記憶體分配內建函式之new函式Golang記憶體函式
- 記憶體動態分配與釋放,malloc和new區別記憶體
- C malloc() free(), C++ new() delete()C++delete
- 轉:malloc VS new, free VS deletedelete
- Redis記憶體——記憶體消耗(記憶體都去哪了?)Redis記憶體
- 記憶體_大頁記憶體記憶體
- 記憶體管理 記憶體管理概述記憶體
- 【記憶體管理】記憶體佈局記憶體
- 實體記憶體和虛擬記憶體記憶體
- Object o = new Object()佔多少個位元組?-物件的記憶體佈局Object物件記憶體
- Go高階特性 14 | 記憶體分配:new 和 make 的使用場景Go記憶體
- 轉:經典String str = new String("abc")記憶體分配問題記憶體
- 遊戲記憶體對比普通記憶體區別 遊戲記憶體和普通記憶體相差大嗎?遊戲記憶體
- 【C++學習筆記】一個使用new和delete的例項C++筆記delete
- Go:記憶體管理與記憶體清理Go記憶體
- Java的記憶體 -JVM 記憶體管理Java記憶體JVM
- 聊聊 記憶體模型與記憶體序記憶體模型
- 記憶體管理篇——實體記憶體的管理記憶體
- 自動共享記憶體管理 自動記憶體管理 手工記憶體管理記憶體
- <七>深入理解new和delete的原理delete
- 【52】寫了placement new也要寫placement deletedelete
- malloc/free 和 new /delete 的區別 (轉)delete
- linux記憶體管理(一)實體記憶體的組織和記憶體分配Linux記憶體
- C++關於一個函式中new記憶體洩露的列子C++函式記憶體洩露
- (轉)Java中定義物件的時候,New和Null的記憶體呼叫Java物件Null記憶體