如何刪除自己建的網(wǎng)站seo分析報(bào)告
單例模式
引言
對于程序設(shè)計(jì)的時(shí)候,我們有些時(shí)候不希望平凡的創(chuàng)建對象,比如創(chuàng)建這個(gè)一個(gè)對象的成本很高,比如線程池,這個(gè)時(shí)候我們希望共享一個(gè)對象,這個(gè)時(shí)候,就可以使用我們的單例模式。
單例模式本質(zhì)上是一種程序設(shè)計(jì)的方式,我們通過合理的設(shè)計(jì),使得某一種類只能定義一次,通過類的靜態(tài)的方式調(diào)用
防止拷貝構(gòu)造和賦值重載
其實(shí)只需要防止拷貝構(gòu)造即可,因?yàn)闃?gòu)造不成功,更不可能賦值重載。
我們提供一種優(yōu)雅的方式,繼承nocopy類
// 定義不能拷貝的類作為基類
class NoCopy
{
public:NoCopy() = default;// 將拷貝構(gòu)造和賦值重載刪除NoCopy(const NoCopy&) = delete;NoCopy& operator=(const NoCopy&) = delete;
};
通過繼承實(shí)現(xiàn)單例模式
這里我只使用了C++11, 也可以使用C++17的更高級的特性簡化
class Object : public NoCopy
{
private:Object() {}
public:Object& getInstance(){if (self == nullptr) self = std::unique_ptr<Object>();return *self;}static std::unique_ptr<Object> self;
};std::unique_ptr<Object> Object::self = nullptr;
在這種情況下,我們只需要調(diào)用Object::getInstance()
就可以直接獲取到對象。
餓漢和懶漢模式
上面我創(chuàng)建的思想是懶漢模式。
餓漢模式就是無論我是否使用這個(gè)單例對象,我都會在執(zhí)行程序的時(shí)候創(chuàng)建一個(gè)對象
懶漢模式更像是一種延遲定義,只有我們需要使用它的時(shí)候,我們才進(jìn)行創(chuàng)建
- 惡漢模式: 直接創(chuàng)建
std::unique_ptr<Object> Object::self = std::make_unique(); // make_unique是C++14支持 Object& getInstance() { return *self; }
- 懶漢模式 : 延遲創(chuàng)建
Object& getInstance(){if (self == nullptr) self = std::unique_ptr<Object>();return *self;} std::unique_ptr<Object> Object::self = nullptr;