1.RAII:
借用局部對
象資源管理的概念。即在一個作用域中的局部對象,在程序運(yùn)行超過該作用域后,該對象被自動銷毀。
2.PIMPL:
PIMPL慣用手法的作用是解開類的使用接口和實(shí)現(xiàn)的耦合。涉及緊耦合和松耦合的概念。松耦合對于編譯時有好處的。舉例說明如下:
#include<x.hpp>
class C
{
public:
void f1();
private:
X x; //與X的強(qiáng)耦合
};
如上面的代碼,C與X的實(shí)現(xiàn)就是強(qiáng)耦合的。從語義角度來講(或者從封裝的角度來講),X是C的實(shí)現(xiàn)的一部分,不應(yīng)該暴露給客戶,它對客戶應(yīng)該是透明的。以上的強(qiáng)耦合,導(dǎo)致如果X的實(shí)現(xiàn)部分被更改,則在編譯的時候,不僅X要重新編譯一次,就連C也要受到牽連。解決這個途徑就是采用PIMPL手法.即將C中X的對象,改為指向X對象的指針。使用指針有效得隔離了X的實(shí)現(xiàn)。且不需要包含X的頭文件,即#include<x.hpp>這一句可以省略。
使用PIMPL修改后的類如下:
class X; //用前置聲明來取代include<x.hpp>
class C
{
...
private:
X* pImpl; //聲明一個X*的時候,class X不用完全定義
};
在一個既定的平臺上,任何指針的大小都是相同的。這樣修改X的定義,就不會影響到類C了。不會出現(xiàn)“城門失火,殃及池魚。”就是因?yàn)樽o(hù)城河離城門遠(yuǎn)了(松耦合)。
3.設(shè)計模式之-工廠模式和與策略模式