more effective C 條款八解讀

2021-08-07 21:15:38 字數 938 閱讀 8471

了解不同意義的new和delete

這裡所說的new是new operator,operator new 以及placement new。

首先我們明確new操作符需要完成兩個工作,乙個是呼叫operator new分配一定的記憶體空間,呼叫物件的建構函式。如果我們我們打算自己給物件分配記憶體,那麼我們定義自己的operator new,在呼叫new操作符,那麼new操作符會呼叫我們的operator new來構建物件。同時operator new也可以用來分配記憶體,返回的是void *型的原始記憶體。placement new的主要用途是在已經分配的記憶體上構建我們的物件。

例如

widget * constructwidgetinbuffer(void *buffer,int widgetsize)

對於delete operator也一樣 他先呼叫物件的析構函式在呼叫operator delete析構函式。值得注意的一點是,我們利用placement new構建的物件我們需要顯示的呼叫析構函式,並且不要使用delete operator。

以下是例子:

void *mallocshared(size_t size);

void freeshared(void * memory);

void *sharedmemor=mallocshared(size_t size);

widget *pw=constructwidgetinbuffer(sharedmemory,10);

pw->~widget();

freeshared(pw);

針對利用new來申請陣列的情況:

1.new 會呼叫operator new來分配記憶體,然後再乙個乙個的呼叫建構函式就行構造。

2.delete 會析構每乙個物件,再釋放相應的記憶體。

More Effective C 《基礎議題》

1 指標 指標是乙個變數,只不過這個變數儲存的是乙個位址,指向記憶體的乙個儲存單元 而引用跟原來的變數實質上是同乙個東西,只不過是原變數的乙個別名而已。如 int a 1 int p a int a 1 int b a 上面定義了乙個整形變數和乙個指標變數p,該指標變數指向a的儲存單元,即p的值是a...

More Effective C 擴充套件方法

c 3.0中增加了許多新特性.其中.擴充套件方法允許我們在不修改原有 的基礎上擴充套件類 介面的功能.有技巧的運用該特性.能寫出有效率 易維護 美觀的 c 2.0提供了許多泛型與容器的介面和類.最常見的如icomparable常常需要新建乙個comparable來進行排序比較等等.但其預設只有乙個c...

more effective C 條款四解讀

深刻考慮是否需要給類提供乙個預設建構函式 有一些類擁有乙個預設建構函式是合理的需求,比如string比如容器 linked list vector 預設建構函式可以把他們初始化為空容器。但是有一些類我們最好還是不要提供預設建構函式。比如乙個equipment類 class equipment 對於這...