一、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用來動態建...