Я пытаюсь реализовать одноэлементный объект с C++ 11. Я получил этот пример от другого пользователя.Отдельный экземпляр объекта
Создает объект с конструктором и конструктором копирования, как private, так и по умолчанию, а также функцию 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