Почему частный конструктор можно использовать вне класса? [дубликат]C++

Программы на C++. Форум разработчиков
Anonymous
Почему частный конструктор можно использовать вне класса? [дубликат]

Сообщение Anonymous »

Я хочу создать вложенный класс, который может быть создан только его внешним классом.
Поэтому я объявляю класс Inner и его конструктор как частные.

Код: Выделить всё

class Outer
{
private:
class Inner
{
friend class Outer;
private:
Inner(int a, int b)
{
SomeValue = a;
SomeValue1 = b;
}
Inner(Inner&) = delete;
Inner(const Inner&)
{

}
Inner(Inner&&) = delete;
Inner(const Inner&&) = delete;
auto operator=(Inner&) = delete;
auto operator=(const Inner&) = delete;
auto operator=(Inner&&) = delete;
auto operator=(const Inner&&) = delete;
public:
int SomeValue = 1;
int SomeValue1 = 1;

};
public:
Inner GetInner()
{
return Inner(2, 2);
}
int SomeValue;
};
Но я могу создать экземпляр l-значения внутреннего класса вот так.

Код: Выделить всё

    Outer outer;
auto A(outer.GetInner());
A.SomeValue++;
auto B = outer.GetInner();
В этом контексте конструктор вызывается только один раз в области действия функции GetInner().
Могу ли я предотвратить это?
Я не хочу кто-то использует класс Inner вне класса Outer.

Подробнее здесь: https://stackoverflow.com/questions/790 ... side-class

Вернуться в «C++»