Страница 5 из 9

Re: Как запретить повторное использование конструктора?

Добавлено: 03 сен 2015, 06:01
Сионист
Уж хотябы

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

class singleton
{
 private:
  singleton()
  {

  }
 public:
  static singleton object;
  int x;
};
singleton singleton: :o bject;
тогда, раз Вы вместо объектов считаете их имена.

Re: Как запретить повторное использование конструктора?

Добавлено: 03 сен 2015, 06:17
Сионист
А вот это:

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

class A
{
 public:
  A()
  {
   static bool flag=false;
   if (flag)
   {
    throw;
   }
   flag=true;
  }
  int x;
};
может показаться сингилтоном, но лишь пока в проекте нет обработки исключений.

Re: Как запретить повторное использование конструктора?

Добавлено: 03 сен 2015, 06:51
Сионист
В классе, который мне нужен, все объекты должны не быть членами.

Re: Как запретить повторное использование конструктора?

Добавлено: 03 сен 2015, 10:25
Оксалайя
Сионист писал(а):По Вашей же логике объекта здесь нет вообще.

Аргументируйте, что ли. Если можете, конечно.
Сионист писал(а):А вот это:

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

class A
{
 public:
  A()
  {
   static bool flag=false;
   if (flag)
   {
    throw;
   }
   flag=true;
  }
  int x;
};
может показаться сингилтоном, но лишь пока в проекте нет обработки исключений.

ЭТО может показаться синглтоном только Вам :)

Re: Как запретить повторное использование конструктора?

Добавлено: 03 сен 2015, 10:35
Romeo
Сионист писал(а):По-Вашему сингилтон - лично моё изобретение в рамках конкретного проекта?
Нет, по-моему ты просто не знаешь, как он должен выглядеть на нормальном языке. Изобрести язык для того, чтобы там синглтон поддерживался одной строкой может каждый дурак, а написать его правильно на том языке, на котором ты сейчас пишешь свой проект - это уже несколько более сложная и квалифицированная работа.

Кстати, ты откуда узнал о синглтоне? Просто слышал где-то? Я сомневаюсь, что ты прочёл GOF'а, где он подробно описан, иначе бы таких глупостей не писал.
Сионист писал(а):По Вашей же логике объекта здесь нет вообще.
Неверно. Объект есть. И он один. На этот единственный объект указывает указатель 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]
Но такая ситация и так невозможна с точки зрения компилятора.

Re: Как запретить повторное использование конструктора?

Добавлено: 03 сен 2015, 10:42
Сионист
Romeo писал(а):Я считаю не имена, а именно объекты. Более того, я использую общепринятую терминологию, а не выдумываю слова на ходу. Можешь сказать, что в твоём понимании "имена объектов"? Ссылку на термин в студию.
Ну идентификатор же.

Re: Как запретить повторное использование конструктора?

Добавлено: 03 сен 2015, 10:54
Romeo
Сионист писал(а):Ну идентификатор же.
Ага, теперь прояснилось. Нет, я считал как раз объекты. Кусочки памяти, в которых расположены данные. В моём случае объект создаётся ровно один и на него указывает m_pSingle. Статическая же функция GetInstance создаёт наш единственный объект, если он ещё не создан и возвращает указатель на него. За счёт того, что конструктор закрыт, вызывающий код сможет получить доступ к единственному объекту только через GetInstance, благодаря чему и достигается единственность.

Кстати, спорить с такой имплементацией бессмысленно. Даже на википедии она такая же, с точностью до переобозначений.

Re: Как запретить повторное использование конструктора?

Добавлено: 03 сен 2015, 10:57
Сионист
Romeo писал(а):Нет, по-моему ты просто не знаешь, как он должен выглядеть на нормальном языке. Изобрести язык для того, чтобы там синглтон поддерживался одной строкой может каждый дурак
Вот именно. И это будет всё тот же синглтон. Если же изобрести язык, в котором оператором множественного ветвления будет слово branches, то там это будет уже не switch. В этом различие между паттерном и языковой конструкцией: switch со скобками двух видов, переменной/выражением и списком ветвей, каждая со своим case - языковая конструкция конкретного языка и оно пишется только в соответствии со стандартами именно этого языка, а синглтон - паттерн, имеющий смысл во всём ООП, означающий класс, гарантирующий единственность своего экземпляра, но из этой семантики не следует одна реализация, просто выбор языка диктует, что оптимальной именно на этом языке будет такая то реализация, но есть другие языки, где сингилтон пишется иначе. Нельзя сравнивать, как пишется switch на c++ и на object pascal, так как на object pascal вообще нет switch, а вместо него case of. А написание синглтона на c++ и object pascal сравнивать можно.

Re: Как запретить повторное использование конструктора?

Добавлено: 03 сен 2015, 10:57
Romeo
Ладно, Бог с ним с синглтоном. Расскажи более подробно, что за объекты и что за отношения между ними должны быть установлены. Я смогу предложить работающую, не избыточную, расширяемую и т.д. архитектуру, которая должна быть в коммерческом коде. Если согласишься с ней, то забирай и используй на здоровье. Если же не согласишься, то что уж поделаешь, пили по-своему, пытаясь наложить ограничение на единственный вызов конструктора :)

Re: Как запретить повторное использование конструктора?

Добавлено: 03 сен 2015, 10:59
Romeo
Сионист писал(а):Вот именно. И это будет всё тот же синглтон. Если же изобрести язык, в котором оператором множественного ветвления будет слово branches, то там это будет уже не switch. В этом различие между паттерном и языковой конструкцией: switch со скобками двух видов, переменной/выражением и списком ветвей, каждая со своим case - языковая конструкция конкретного языка и оно пишется только в соответствии со стандартами именно этого языка, а синглтон - паттерн, имеющий смысл во всём ООП, означающий класс, гарантирующий единственность своего экземпляра, но из этой семантики не следует одна реализация, просто выбор языка диктует, что оптимальной именно на этом языке будет такая то реализация, но есть другие языки, где сингилтон пишется иначе. Нельзя сравнивать, как пишется switch на c++ и на object pascal, так как на object pascal вообще нет switch, а вместо него case of. А написание синглтона на c++ и object pascal сравнивать можно.
Да хватит уже воду лить о других языках. Ты же проект на С++ пишешь. Ты хочешь в свой проект вставить синглтон на другом языке? Вот флуд и ничего более.