В вашем вопросе есть определенная двусмысленность. Видите ли, неявные действия, которые компилятор выполняет в отношении конструкторов, включают как объявление их, так и определение их. Если какой-то конструктор объявлен, но не определен, считаете ли вы, что он существует или нет?
В любом случае, нет способа создать класс, у которого нет конструкторов , объявленных для него . Конструктор копирования, например, всегда объявляется. Там нет никакого способа, чтобы подавить это. Если вы не объявите это сами, компилятор объявит это для вас.
Что касается конструктора по умолчанию - возможно подавить его неявное объявление. Если вы объявите любой конструктор самостоятельно (т.е. явно), компилятор не будет неявно объявлять конструктор по умолчанию. Но в этом случае у вашего класса, конечно, будет конструктор: тот, который вы объявили сами. (Кроме того, как я уже говорил выше, конструктор копирования всегда объявляется).
Что касается неявно определенных конструкторов ... Они определяются компилятором, только если вы их используете. И, конечно же, они определяются только тогда, когда это возможно. (Если вы используете неявный конструктор, и его невозможно определить, ваша программа просто не будет компилироваться).
Итак, еще раз, когда дело доходит до объявленных конструкторов , невозможно иметь класс без конструкторов вообще. У любого класса есть хотя бы один конструктор, объявленный для него.
Если вас особенно интересуют определенные конструкторы , тогда действительно возможно иметь класс, для которого конструктор не определен. Вот пример для вас
struct S {
S(const S&);
};
Вот и все. В классе есть один конструктор, в котором он объявлен, но он не определен:)