Оператор "new" должен вызывать конструктор, поэтому, если конструктор является закрытым, вы не можете выполнить код "obj = new A", кроме как внутри функций-членов самого класса A.
Я бы предположил, что вы столкнулись с техникой, которая очень часто используется в Java (и да, я знаю, что вы пишете на C ++, но принцип тот же), когда разработчик класса хочет убедиться, что когда-либо будет существовать один и только один экземпляр этого класса (который называется «синглтон»). Чтобы достичь этого, ему нужно запретить другому коду создавать дополнительные экземпляры класса, используя new, и сделать конструктор закрытым - один из способов сделать это. Вот фрагмент кода Java, иллюстрирующий эту технику.
public class MySingleton {
private MySingleton() {
// Private constructor, to prevent instantiation using "new"
// outside of this class.
}
public synchronized static MySingleton getInstance() {
static MySingleton instance = null;
if (instance == null) {
// I can use new here because I'm inside the class.
instance = new MySingleton();
}
return instance;
}
}
Даже если вы не знаете Java, синтаксис достаточно похож на C ++, поэтому вы должны понимать, что делает этот код. Дело в том, что единственный способ получить ссылку на экземпляр класса MySingleton в другом месте кода - это вызвать статический член класса getInstance ().
MySingleton obj = MySingleton.getInstance();