2012-05-06 5 views
25

Иногда я не хочу предоставлять конструктор по умолчанию, и я не хочу, чтобы компилятор предоставил конструктор по умолчанию для моего класса. В C++ 11, я могу сделать вещи, как:Как удалить конструктор по умолчанию?

class MyClass 
{ 
    public: 
    MyClass() = delete; 
}; 

Но в настоящее время мой преподаватель не позволяет мне сделать это в моем назначении. Возникает вопрос: до C++ 11 есть ли способ сказать компилятору, чтобы он неявно предоставлял конструктор по умолчанию?

ответ

34

Я бы сказал сделать это частный .. что-то вроде

class MyClass 
{ 
private: 
    MyClass(); 
} 

и не один (из-за пределов самого или друга классы класса) будут иметь возможность вызывать конструктор по умолчанию. Кроме того, тогда у вас будет три варианта использования класса: либо предоставить параметризованный конструктор, либо использовать его как класс утилиты (один со статическими функциями) или создать фабрику для этого типа в классе друзей.

+0

Скотт Мейерс в своей книге «Эффективный современный C++» пишет, что вы также можете оставить свой частный конструктор без определения. Это поможет вам защитить конструктор по умолчанию от вызова из классов друзей (будет вызвана ошибка связи). – MrPisarik

12

Несомненно. Определите свой собственный конструктор, по умолчанию или иначе.

Вы также можете объявить его закрытым, чтобы его невозможно было вызвать. Это, к сожалению, сделает ваш класс совершенно непригодным для использования, если вы не предоставите статическую функцию для его вызова.

Смежные вопросы