**:
1. plain new 普通new
void*operator new(std::size_t)throw(std::bad_alloc);
void operator delete( void *) throw();
該運算子在分配失敗時將丟擲異常,而非返回null。使用時要包含 標頭檔案。正常使用new,但要配以異常處理。如:
char *getmemory(unsigned long size)
void main(void )
catch(const std::bad_alloc & ex)
;它是個全域性常物件 const nothrow_t nothrow; 用來作為 new 運算子的標誌,以區別前乙個new.
3.placement new 放置new
>void*operator new(std::size_t ,void *);
void operator delete( void * ,void *);
該運算子是在已分配的記憶體上重新構造物件,因為不分配記憶體,所以不必擔心分配失敗。唯一的工作是呼叫建構函式。要包含 標頭檔案。
# include # include void main()
placement new 的主要用途就是可以反覆使用一塊已申請成功的記憶體空間。這樣可以避免申請失敗的徒勞,又可以避免使用後的釋放。
特別要注意的是對於 placement new 絕不可以呼叫的delete, 因為該new只是使用別人替它申請的地方(只是個租房戶,不是房主。無權將房子賣掉)。釋放記憶體是nothrow new的事,即要使用原來的指標釋放記憶體
new運算子的使用
c 中使用new運算子來申請記憶體,其基本格式為 int p1 new int 分配乙個未初始化的int記憶體 int p2 new int 6 分配乙個int記憶體,並用括號內的值初始化 int p3 new int 3 分配一組int記憶體,並用花括號內的值初始化也可以使用new運算子為乙個結構...
C 使用 定位new運算子
通常,new負責在堆 heap 中找到乙個足以能夠滿足要求的記憶體塊。new運算子還有一種變體,被稱為定位 placement new運算子,它能讓我們向編譯器指定要使用的位置。程式設計師可以使用這種特性來設定其記憶體管理規程,處理需要通過特定位址進行訪問的硬體或者在特定位置建立物件。要使用這一特性...
詳解C 中new運算子和delete運算子的使用
c 支援使用 new 和 delete 運算子動態分配和釋放物件。這些運算子為來自稱為 自由儲存 的池中的物件分配記憶體。new 運算子呼叫特殊函式 operator new,delete 運算子呼叫特殊函式 operator delete。在 visual c net 2002 中,標準 c 庫中...