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