c 寒假學習 new與delete表示式

2021-10-01 23:01:51 字數 2585 閱讀 3236

一、new表示式工作步驟

使用new表示式時發生的三個步驟:

呼叫名為operator new的標準庫函式,分配足夠大的原始的未型別化的記憶體,

以儲存指定型別的乙個物件

執行該型別的乙個建構函式初始化物件

返回指向新分配並構造的建構函式物件的指標

二、nedelete表示式工作步驟

使用delete表示式時發生的兩個步驟:

4. 呼叫析構函式,**物件所申請的資源

5. 呼叫名為operator delete的標準庫函式釋放該物件所用的記憶體

三、operator new和operator delete函式的過載版本

//operator new庫函式

void * operator new(size_t);

void * operator new(size_t);

//operator delete庫函式

void operator delete(void *);

void operator delete(void *);

void

*operator

new(size_t sz)

void

operator

delete

(void

* pointer)

只能建立棧物件

#define _crt_secure_no_warnings

#include

"stdafx.h"

#include

"string.h"

#include

//#include "stdio.h"

using std::cout;

using std::endl;

class

student

public

:student

(int id,

const

char

* name)

//為什麼這裡要加const?

:_id

(id)

,_name

(new

char

[strlen

(name)+1

])public

://private:

~student()

public

://void destroy()

//void

operator

delete

(void

* pointer)

void

print()

const

private

:char

* _name;

int _id;};

//只能建立棧物件

//只能建立堆物件

intmain()

呼叫建構函式

_id:99

_name:lin

請按任意鍵繼續. . .

呼叫析構函式

只能建立堆物件

#define _crt_secure_no_warnings

#include

"stdafx.h"

#include

"string.h"

#include

//#include "stdio.h"

using std::cout;

using std::endl;

class

student

public

:student

(int id,

const

char

* name)

//為什麼這裡要加const?

:_id

(id)

,_name

(new

char

[strlen

(name)+1

])//public:

private:~

student()

public

:void

destroy()

void

operator

delete

(void

* pointer)

void

print()

const

private

:char

* _name;

int _id;};

//只能建立堆物件

intmain()

呼叫operator new

呼叫建構函式

_id:100

_name:kang

呼叫析構函式

呼叫operator delete

請按任意鍵繼續. . .

C 中new與delete問題學習

一 new char與delete問題 1.問題程式 cpp view plaincopy include using namespace std void main 2.錯誤 當執行到delete時,程式出錯!3 解答 v1你用new申請了乙個char空間,把它的位址儲存在了des這個指標裡面 然...

C 之物件的new與delete

這裡單獨說一點對於類物件的new和delete中到底開闢的是哪段空間,釋放的是哪段空間。還是一樣舉個例子 class a a int main 構造器和析構器就不用說了,顯然構造器中的new是為str開闢了一段100位元組空間,析構器中delete釋放的也是為str的那100位元組大小的空間。那麼m...

c 中new與delete的過載

對於有一定程式設計基礎的人來說,new與delete一定會非常的熟悉,知道在使用的過程中 new 先分配memory 記憶體 再呼叫ctor 建構函式 而delete是先呼叫dtor 析構函式 再釋放memory。int p new int 10 int pa new int 10 new用來動態建...