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

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

Закрыто
Аватара пользователя
Сионист
Сообщения: 1211
Зарегистрирован: 31 мар 2014, 06:18

Romeo писал(а):Ага, теперь прояснилось. Нет, я считал как раз объекты. Кусочки памяти, в которых расположены данные.

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

class singleton
{
 private:
  static singleton *object;
 public:
  int x;
  singleton ()
  {
   if (object!=nullptr)
   {
    object=this;
   }
   this=object;
  }
};
singleton *singleton: :o bject=nullptr;
singleton a;
singleton b;
. a и b разделяют одну и ту же память. В случае же оболочечного объекта со статическим полем объект, содержащий собственно данные, имеется в единственном экземпляре, а много у него лишь оболочек. Статическое поле занимает одну и ту же память, не зависимо от того, через какой именно объект вызван метод, к данному полю, или к его члену обращающийся.
Писать можно на чём угодно, но зачем же так себя ограничивать? Пиши на c.
Аватара пользователя
Romeo
Сообщения: 3126
Зарегистрирован: 02 мар 2004, 17:25
Откуда: Крым, Севастополь
Контактная информация:

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

Romeo писал(а):То есть ты снова на своём языке пишешь? Никак на С++ вернуться не хочешь? В C++ нельзя написать this=object и это ключевое ограничение, снятие которого вообще разрушит идеологию ООП в языке. Почему? Потому что this - это адрес объекта, для которого был вызван метод и этот адрес никак нельзя поменять. Ты ведь не можешь физически в оперативной памяти сменить адрес ячейки с одного на другой, верно? Извини, я просто не знаю, как объяснить ещё более доходчиво всю глупость строки this=object. Давай, наверное, ты всё же для начала прочтёшь базовый курс С++, а потом мы продолжим беседу.
А никого не смущает, что одни методы могут присваивать значения полям, а другие нет? Плейсемент нью ни кого не смущает? А перемещающее присваивание? Это не метод, а конструктор. Наложите ограничения на эту операцию, по которым адрес должен быть валиден и не может располагаться ни на стеке, ни в куче, а сама операция может быть применена только в конструкторе, который в этом случае не может быть использован для создания автоматических и динамических объектов, кроме того сама операция ещё и подразумевает проверку на совпадение старого и нового значений this и при несовпадении освобождение памяти размера sizeof(свой класс) по старому адресу, не может применяться в цикле, её наличие в тексте конструктора запрещает goto в точку до неё, она не может встречаться в тексте конструктора более одного раза. Что разрушит ООП? При этом я не утверждаю, что данное извращение хоть чем то лучше реального c++.
Писать можно на чём угодно, но зачем же так себя ограничивать? Пиши на c.
Аватара пользователя
Оксалайя
Сообщения: 27
Зарегистрирован: 01 сен 2015, 12:12

Сионист , мне кажется, Вы форумом ошиблись. Если хотите рассуждать о розовых единорогах с пушистыми гривами, пишущих на выдуманных языках - то Вам на форум любителей фэнтези. А тут все мыслят в категориях С++.
Аватара пользователя
Romeo
Сообщения: 3126
Зарегистрирован: 02 мар 2004, 17:25
Откуда: Крым, Севастополь
Контактная информация:

Сионист, извини, но это просто бессвязный поток слов. Дальнейший смысл спора теряется, так как мы разговариваем на разных языках. Прочти базовый курс С++, после этого продолжим, если в этом будет необходимость.
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 писал(а):Сионист, извини, но это просто бессвязный поток слов. Дальнейший смысл спора теряется, так как мы разговариваем на разных языках. Прочти базовый курс С++, после этого продолжим, если в этом будет необходимость.
Ну ка найди у меня хоть одно слово, не связанное хотябы с одним другим.
Писать можно на чём угодно, но зачем же так себя ограничивать? Пиши на c.
Аватара пользователя
Сионист
Сообщения: 1211
Зарегистрирован: 31 мар 2014, 06:18

Оксалайя писал(а):Сионист , мне кажется, Вы форумом ошиблись. Если хотите рассуждать о розовых единорогах с пушистыми гривами, пишущих на выдуманных языках - то Вам на форум любителей фэнтези. А тут все мыслят в категориях С++.
Сингилтон - не категория c++, а паттерн ООП.
Писать можно на чём угодно, но зачем же так себя ограничивать? Пиши на c.
Аватара пользователя
Romeo
Сообщения: 3126
Зарегистрирован: 02 мар 2004, 17:25
Откуда: Крым, Севастополь
Контактная информация:

Сионист писал(а):Сингилтон - не категория c++, а паттерн ООП.
Сионист, сколько же можно ещё? Ты в своём сообщении написал впервые о синглтоне в контексте своего проекта, написанного на С++. Я спросил, понял ли ты там, что написал. А потом разжевал в чём именно состоит глупость твоих высказываний касательно синглтона, который ты собирался добавить в свой проект. Проект у тебя на С++ написан или на придуманном языке? Что же за упорство такое нечеловеческое?

Да, мало у тебя знаний по программированию, и они не академеческие. Там схватил, здесь схватил, тот термин запомнил, а этот слышал, да забыл. Ничего страшного в этом нет. Кто-то силён в одной дисциплине, а кто-то в другой. Я прекрасно понимаю, что программирование - это не твоя основная специализация. Просто возьми и признай нехватку знаний и начни прислушиваться к людям, у которых программирование - это работа, а не вспомогательный навык для написания диссертации.

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

1. Что странного в том, что синглитон имеет смысл в рамках всего ООП?
2. В моём проекте нет и ни когда не будет настоящего синглтона.
3. Кавычки были сразу.
Писать можно на чём угодно, но зачем же так себя ограничивать? Пиши на c.
Закрыто