Почему частный конструктор можно использовать вне класса? [дубликат]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
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

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