我試圖用C++ 11實現一個類似單例的對象。我從其他用戶那裏得到了這個例子。對象的單個實例
它用構造函數和拷貝構造函數private和default創建一個對象,以及一個返回靜態對象的instance()函數。
據我所知,這應該防止創建這個對象的兩個實例。但正如你可以在我的main.cpp中看到的那樣,我創建了兩個實例並編譯並運行。
我的對象創建是錯誤的還是什麼?我不明白。
object.hpp:
#ifndef OBJECT_H
#define OBJECT_H
#include <iostream>
using namespace std;
class Object
{
private:
Object() = default;
Object(const Object&) = delete;
public:
// Singleton in C++11
static Object& instance() { static Object z; return z; }
};
#endif // OBJECT_H
main.cpp中:
#include "object.hpp"
int main()
{
Object* object = new Object();
object->instance();
Object* object2 = new Object();
object->instance();
return 0;
}
也許這是'= default'奇怪的規則之一。如果我使用Object(){}而不是Object()= default;'我得到想要的結果('new'不起作用。) – alfC
精確地使用術語:「它用構造函數創建一個對象和副本......「。其實它創建一個類:)。也許命名一個類「對象」不是最好的主意,因爲這個) –
你說得對,alfC,如果我使用Object(){},我的編譯器也會抱怨'new'命令。有更多關於'= default'的怪異規則嗎? – Smii