記憶體(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++,new,delete,記憶體洩漏,野指標函式C++delete記憶體指標
- return new物件造成溢位記憶體物件記憶體
- 記憶體分配詳解 malloc, new, HeapAlloc, VirtualAlloc,GlobalAlloc記憶體
- C malloc() free(), C++ new() delete()C++delete
- Golang記憶體分配內建函式之new函式Golang記憶體函式
- <七>深入理解new和delete的原理delete
- Redis記憶體——記憶體消耗(記憶體都去哪了?)Redis記憶體
- Object o = new Object()佔多少個位元組?-物件的記憶體佈局Object物件記憶體
- Go高階特性 14 | 記憶體分配:new 和 make 的使用場景Go記憶體
- 記憶體管理 記憶體管理概述記憶體
- 【記憶體管理】記憶體佈局記憶體
- Java的記憶體 -JVM 記憶體管理Java記憶體JVM
- Go:記憶體管理與記憶體清理Go記憶體
- 聊聊 記憶體模型與記憶體序記憶體模型
- linux記憶體管理(一)實體記憶體的組織和記憶體分配Linux記憶體
- 記憶體管理篇——實體記憶體的管理記憶體
- 程式設計中new[]和delete[]應該如何使用?程式設計delete
- 遊戲記憶體對比普通記憶體區別 遊戲記憶體和普通記憶體相差大嗎?遊戲記憶體
- JS中的棧記憶體、堆記憶體JS記憶體
- Java記憶體區域和記憶體模型Java記憶體模型
- 直接記憶體和堆記憶體誰快記憶體
- 記憶體溢位和記憶體洩露記憶體溢位記憶體洩露
- 【Java基礎】實體記憶體&虛擬記憶體Java記憶體
- 【記憶體洩漏和記憶體溢位】JavaScript之深入淺出理解記憶體洩漏和記憶體溢位記憶體溢位JavaScript
- 什麼是Java記憶體模型(JMM)中的主記憶體和本地記憶體?Java記憶體模型
- Java記憶體模型(MESI、記憶體屏障、volatile和鎖及final記憶體語義)Java記憶體模型
- 如何檢視linux系統中空閒記憶體/實體記憶體使用/剩餘記憶體Linux記憶體
- [轉載] Java直接記憶體與堆記憶體Java記憶體
- JVM——記憶體洩漏與記憶體溢位JVM記憶體溢位
- 關於redis記憶體分析,記憶體優化Redis記憶體優化
- 記憶體管理兩部曲之實體記憶體管理記憶體
- 記憶體模型記憶體模型
- 【AIX】記憶體AI記憶體
- 直接記憶體記憶體