Код: Выделить всё
class singleton
{
private:
singleton()
{
}
public:
static singleton object;
int x;
};
singleton singleton: :o bject;
Модераторы: Hawk, Romeo, Absurd, DeeJayC, WinMain
Код: Выделить всё
class singleton
{
private:
singleton()
{
}
public:
static singleton object;
int x;
};
singleton singleton: :o bject;
Код: Выделить всё
class A
{
public:
A()
{
static bool flag=false;
if (flag)
{
throw;
}
flag=true;
}
int x;
};
Сионист писал(а):По Вашей же логике объекта здесь нет вообще.
Сионист писал(а):А вот это:может показаться сингилтоном, но лишь пока в проекте нет обработки исключений.Код: Выделить всё
class A { public: A() { static bool flag=false; if (flag) { throw; } flag=true; } int x; };
Нет, по-моему ты просто не знаешь, как он должен выглядеть на нормальном языке. Изобрести язык для того, чтобы там синглтон поддерживался одной строкой может каждый дурак, а написать его правильно на том языке, на котором ты сейчас пишешь свой проект - это уже несколько более сложная и квалифицированная работа.Сионист писал(а):По-Вашему сингилтон - лично моё изобретение в рамках конкретного проекта?
Неверно. Объект есть. И он один. На этот единственный объект указывает указатель m_pSingle.Сионист писал(а):По Вашей же логике объекта здесь нет вообще.
Сионист писал(а):Код: Выделить всё
class singleton { private: singleton() { } public: static singleton object] [/quote] Господи, ты хоть пробовал откомпилировать то, что прислал? Налицо полное непонимание принципов работы комилятора С++. Внутри класса могут быть только ссылки или указатели на самого себя. Объяснять почему? [quote="Сионист"]тогда, раз Вы вместо объектов считаете их имена.[/quote] Я считаю не имена, а именно объекты. Более того, я использую общепринятую терминологию, а не выдумываю слова на ходу. Можешь сказать, что в твоём понимании "имена объектов"? Ссылку на термин в студию. [quote="Сионист"] [code=cpp] class A { public: A() { static bool flag=false] [/quote] No comments. [quote="Сионист"]В классе, который мне нужен, все объекты должны не быть членами.[/quote] Марсианский язык какой-то... Вот поэтому тебя очень тяжело понимать, так как ты пишешь те слова, которые тебе кажутся самому правильными, а не используешь общепринятую терминологию. Если я попытаюсь это представить по канонам использованных терминов, то получится, что ты говоришь, что у тебя не должно быть вот такой ситуации: [code=cpp] class A { A m_a1] Но такая ситация и так невозможна с точки зрения компилятора.
Ну идентификатор же.Romeo писал(а):Я считаю не имена, а именно объекты. Более того, я использую общепринятую терминологию, а не выдумываю слова на ходу. Можешь сказать, что в твоём понимании "имена объектов"? Ссылку на термин в студию.
Ага, теперь прояснилось. Нет, я считал как раз объекты. Кусочки памяти, в которых расположены данные. В моём случае объект создаётся ровно один и на него указывает m_pSingle. Статическая же функция GetInstance создаёт наш единственный объект, если он ещё не создан и возвращает указатель на него. За счёт того, что конструктор закрыт, вызывающий код сможет получить доступ к единственному объекту только через GetInstance, благодаря чему и достигается единственность.Сионист писал(а):Ну идентификатор же.
Вот именно. И это будет всё тот же синглтон. Если же изобрести язык, в котором оператором множественного ветвления будет слово branches, то там это будет уже не switch. В этом различие между паттерном и языковой конструкцией: switch со скобками двух видов, переменной/выражением и списком ветвей, каждая со своим case - языковая конструкция конкретного языка и оно пишется только в соответствии со стандартами именно этого языка, а синглтон - паттерн, имеющий смысл во всём ООП, означающий класс, гарантирующий единственность своего экземпляра, но из этой семантики не следует одна реализация, просто выбор языка диктует, что оптимальной именно на этом языке будет такая то реализация, но есть другие языки, где сингилтон пишется иначе. Нельзя сравнивать, как пишется switch на c++ и на object pascal, так как на object pascal вообще нет switch, а вместо него case of. А написание синглтона на c++ и object pascal сравнивать можно.Romeo писал(а):Нет, по-моему ты просто не знаешь, как он должен выглядеть на нормальном языке. Изобрести язык для того, чтобы там синглтон поддерживался одной строкой может каждый дурак
Да хватит уже воду лить о других языках. Ты же проект на С++ пишешь. Ты хочешь в свой проект вставить синглтон на другом языке? Вот флуд и ничего более.Сионист писал(а):Вот именно. И это будет всё тот же синглтон. Если же изобрести язык, в котором оператором множественного ветвления будет слово branches, то там это будет уже не switch. В этом различие между паттерном и языковой конструкцией: switch со скобками двух видов, переменной/выражением и списком ветвей, каждая со своим case - языковая конструкция конкретного языка и оно пишется только в соответствии со стандартами именно этого языка, а синглтон - паттерн, имеющий смысл во всём ООП, означающий класс, гарантирующий единственность своего экземпляра, но из этой семантики не следует одна реализация, просто выбор языка диктует, что оптимальной именно на этом языке будет такая то реализация, но есть другие языки, где сингилтон пишется иначе. Нельзя сравнивать, как пишется switch на c++ и на object pascal, так как на object pascal вообще нет switch, а вместо него case of. А написание синглтона на c++ и object pascal сравнивать можно.