Может ли класс друга вызвать приватный конструктор в c ++? (и что такое синглтон)

Рассмотрим класс A и B. Класс A подружился с классом B. Класс B имеет собственный конструктор. Может ли класс A создавать экземпляры класса B или является закрытым конструктором, указывающим компилятору, что класс не могу быть созданным, даже классом друга?
Вот пример кода:

class B;

class A {
void myFunction() {
B newBobject;
}
};

class B {
private:
B() {}
public:
int someData;
friend class A;
};

Также обратите внимание, что я использую C ++ 03. Если это недопустимо в C ++ 03, разрешено ли это в C ++ 11?

В качестве дополнительного вопроса, как связан метод Синглтона? Имеет ли дело конкретно создание экземпляра одного и только одного экземпляра объекта или это что-то еще?

1

Решение

Ваш код (больше похоже на вашу идею) на самом деле без ошибок и действителен как для C ++ 03 а также C ++ 11.

Однако в вашем коде есть 2 ошибки. Чтобы создать объект типа B, вам нужно увидеть полное определение B, а это означает, что определения B и A необходимо заменить.

Во-вторых, вам нужно сделать myfunction общедоступный или позвоните из класса А.

Чтобы ответить на ваш другой вопрос .. Большинство синглетонов реализовано примерно так …

class Singleton{
private:

Singleton(){}
public:
static Singleton& GetInstance(){
static Singleton instance;
return instance;
}
};

Это не позволит никому, кроме класса Singleton (и друга, как вы обнаружили), создать экземпляр этого класса, поэтому будет проще применять правило 1 объекта. Синглтон будет доступен как Singleton::GetInstance(),

Эта и другие возможные реализации показаны на Википедия.

3

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]