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

Модераторы: Hawk, Romeo, Absurd, DeeJayC, WinMain

Закрыто
Аватара пользователя
Romeo
Сообщения: 3126
Зарегистрирован: 02 мар 2004, 17:25
Откуда: Крым, Севастополь
Контактная информация:

Сионист писал(а):Как же я их писал то?
Да я вижу, как ты их писал. Сочувствую человеку, который их суппортит.
Entites should not be multiplied beyond necessity @ William Occam
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.
Аватара пользователя
Romeo
Сообщения: 3126
Зарегистрирован: 02 мар 2004, 17:25
Откуда: Крым, Севастополь
Контактная информация:

Сионист писал(а):Не распарсил.
Я и не сомневался. Про исключения у Шилдта ты тоже не распарсил. И не нужно говорить, что они там не были описаны. Ты просто не всё понимаешь, когда читаешь :)
Entites should not be multiplied beyond necessity @ William Occam
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.
Аватара пользователя
Сионист
Сообщения: 1211
Зарегистрирован: 31 мар 2014, 06:18

Romeo писал(а):Уууу, вот тут мне уже нечего добавить. Ну-ка покажи мне, как по-твоему должен выглядеть настоящий синглтон в твоём понимании. Говоришь особенности реализации? Покажи мне свою реализацию.

Сионист, ты просто неуч, который пытается казаться важным и умным
Я не пытаюсь казаться, тем более важным. И неучи кандидатские не только не защищают, но даже поступить в аспирантуру не способны. А по поводу показа,
1. Возможен язык, на котором будет возможна такая реализая:

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

class singelton
{
 private:
  static singelton *first;
 public:
  singelton ()
  {
   if (first==nullptr)
   {
    first=this;
   }
   this=first;
  }
  singelton (const singelton &Original)
  {
   this=&Original;
  }
...
};
.
1.1. Все объекты разделяют одну память, за счёт чего все их поля и имеют совпадающие значения, а любая операция над одним объектом оказывается операцией над всеми.
1.2. Объекты нельзя создавать динамически.
Я не берусь утверждать, что такой язык был бы лучше реального c++, но такой язык в принципе возможен.
На обджект паскале возможен класс, весь интерфейс которого будет построен на методах, конструкторах, деструкторе и свойствах, которые с виду вроде бы имеют интерфейс полей, но на самом деле за ними скрываются пары методов. Если при данной особенности языка поддерживать ещё private классы-члены и static private поля, то можно класс сделать оболочечным, а в методы доступа к свойствам завернуть обращение к единственному static private полю, которое и будет настоящим объектом.
Писать можно на чём угодно, но зачем же так себя ограничивать? Пиши на c.
Аватара пользователя
Сионист
Сообщения: 1211
Зарегистрирован: 31 мар 2014, 06:18

Romeo писал(а):Я и не сомневался. Про исключения у Шилдта ты тоже не распарсил. И не нужно говорить, что они там не были описаны. Ты просто не всё понимаешь, когда читаешь :)
Описаны. Но очень кратко и очень туманно. Понятно только каким словом бросать и как ловить одним catch все исключения.
Писать можно на чём угодно, но зачем же так себя ограничивать? Пиши на c.
Аватара пользователя
Romeo
Сообщения: 3126
Зарегистрирован: 02 мар 2004, 17:25
Откуда: Крым, Севастополь
Контактная информация:

Если кандидат, то тогда всё понятно. Теоретик, не разбирающийся в практике. Я таких видел не одного, к сожалению. Отказывал им на собеседовании...

По поводу реализации. Это не синглтон по определению, так как можно создать множество объектов этого класса.

На счёт "возможен" язык, я так и не понял. Ты сейчас пишешь на С++ или на придуманном языке? При чём тут вообще какой-то там язык, который ты изобрёл на скорую руку? Проект у тебя написан на С++ и говорили мы везде в контексте С++. Так что приведи мне честный сиглтон без скрытых конструкторов. Если не можешь привести такой пример, то просто признай это, и я покажу тебе, кандидату-неучу, как должен выглядеть настоящий синглтон на С++. Более того, смею заметить, что архитектурно он будет выглядеть точно так же и на других современных языках программирования, а именно на C# и на Java.
Entites should not be multiplied beyond necessity @ William Occam
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.
Аватара пользователя
Сионист
Сообщения: 1211
Зарегистрирован: 31 мар 2014, 06:18

Romeo писал(а):По поводу реализации. Это не синглтон по определению, так как можно создать множество объектов этого класса.
Это не множество по определению. Хоть в том, хоть в другом случае. В одном случае имён объекта может быть сколько угодно, но они все - синонимы друг друга, то есть в принципе множество будет ссылок, а объект то один. В другом случае множество будет оболочечных объектов, в которые завёрнут один и тот же объект-поле. Множества целевых объектов нет ни в том, ни в другом случае.
Писать можно на чём угодно, но зачем же так себя ограничивать? Пиши на c.
Аватара пользователя
Сионист
Сообщения: 1211
Зарегистрирован: 31 мар 2014, 06:18

Romeo писал(а):На счёт "возможен" язык, я так и не понял. Ты сейчас пишешь на С++ или на придуманном языке? При чём тут вообще какой-то там язык, который ты изобрёл на скорую руку? Проект у тебя написан на С++ и говорили мы везде в контексте С++. Так что приведи мне честный сиглтон без скрытых конструкторов. Если не можешь привести такой пример, то просто признай это, и я покажу тебе, кандидату-неучу, как должен выглядеть настоящий синглтон на С++. Более того, смею заметить, что архитектурно он будет выглядеть точно так же и на других современных языках программирования, а именно на C# и на Java.
Гипотетический язык при том, что сингилтон - не специфически c++-ная языковая конструкция, а шаблон проектирования, имеющий смысл во всём ООП. И если реализация даже вытекает из особенностей языка, это ещё не означает, что сам паттерн требует именно такой реализации. Можно вообще включить слово single в язык и разрешить такой синтаксис:

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

class A
{
 public:
  A () single;
};
, после чего компилятор будет самостоятельно следить за количеством вызовов конструктора. Не нужно? Согласен. Но возможно и семантике сингилтона соответствует.
Писать можно на чём угодно, но зачем же так себя ограничивать? Пиши на c.
Аватара пользователя
Romeo
Сообщения: 3126
Зарегистрирован: 02 мар 2004, 17:25
Откуда: Крым, Севастополь
Контактная информация:

Блин, да при чём тут другой язык программирования? Мы ведь говорили о С++. И проект у тебя на С++ написан. Или ты собираешь в него вставить класс, написанный на другом языке? Ну хватит уже заниматься словоблудием.

Хорошо, не хочешь признавать что был не прав, Бог с ним. Для тех, кто тоже читает эту тему и кому будет интересно, пишу, как должен выглядеть синглтон на С++. А ты не читай этого. Ты на своём языке пиши свой синглтон, потом пиши для этого языка компилятор, а потом вставляй это всё дело в свой проект, написанный на С++, авось заработает.

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

class Singleton
{
public:
   static Singleton* GetInstance()
   {
      if (m_pSingle == NULL)
      {
         m_pSinge = new Singleton();
      }
      return m_pSingle;
   }

   void DoSomething() { ... }

   // some non-static methods

private:
   // some non-static fields

private:
   Singletone()
   {
      // some initialization
   }

   static Singleton* m_pSingle;
};

void main()
{
   Singleton::GetInstance()->DoSomething();
}

Entites should not be multiplied beyond necessity @ William Occam
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.
Аватара пользователя
Сионист
Сообщения: 1211
Зарегистрирован: 31 мар 2014, 06:18

По-Вашему сингилтон - лично моё изобретение в рамках конкретного проекта?
Писать можно на чём угодно, но зачем же так себя ограничивать? Пиши на c.
Аватара пользователя
Сионист
Сообщения: 1211
Зарегистрирован: 31 мар 2014, 06:18

Romeo писал(а):

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

class Singleton
{
public:
   static Singleton* GetInstance()
   {
      if (m_pSingle == NULL)
      {
         m_pSinge = new Singleton();
      }
      return m_pSingle;
   }

   void DoSomething() { ... }

   // some non-static methods

private:
   // some non-static fields

private:
   Singletone()
   {
      // some initialization
   }

   static Singleton* m_pSingle;
};

void main()
{
   Singleton::GetInstance()->DoSomething();
}
По Вашей же логике объекта здесь нет вообще.
Писать можно на чём угодно, но зачем же так себя ограничивать? Пиши на c.
Закрыто