Страница 6 из 9
Re: Как запретить повторное использование конструктора?
Добавлено: 03 сен 2015, 11:06
Сионист
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
разделяют одну и ту же память. В случае же оболочечного объекта со статическим полем объект, содержащий собственно данные, имеется в единственном экземпляре, а много у него лишь оболочек. Статическое поле занимает
одну и ту же память, не зависимо от того, через какой именно объект вызван метод, к данному полю, или к его члену обращающийся.
Re: Как запретить повторное использование конструктора?
Добавлено: 03 сен 2015, 11:22
Romeo
То есть ты снова на своём языке пишешь? Никак на С++ вернуться не хочешь? В C++ нельзя написать this=object и это ключевое ограничение, снятие которого вообще разрушит идеологию ООП в языке. Почему? Потому что this - это адрес объекта, для которого был вызван метод и этот адрес никак нельзя поменять. Ты ведь не можешь физически в оперативной памяти сменить адрес ячейки с одного на другой, верно? Извини, я просто не знаю, как объяснить ещё более доходчиво всю глупость строки this=object. Давай, наверное, ты всё же для начала прочтёшь базовый курс С++, а потом мы продолжим беседу.
Re: Как запретить повторное использование конструктора?
Добавлено: 03 сен 2015, 11:33
Сионист
Romeo писал(а):То есть ты снова на своём языке пишешь? Никак на С++ вернуться не хочешь? В C++ нельзя написать this=object и это ключевое ограничение, снятие которого вообще разрушит идеологию ООП в языке. Почему? Потому что this - это адрес объекта, для которого был вызван метод и этот адрес никак нельзя поменять. Ты ведь не можешь физически в оперативной памяти сменить адрес ячейки с одного на другой, верно? Извини, я просто не знаю, как объяснить ещё более доходчиво всю глупость строки this=object. Давай, наверное, ты всё же для начала прочтёшь базовый курс С++, а потом мы продолжим беседу.
А никого не смущает, что одни методы могут присваивать значения полям, а другие нет? Плейсемент нью ни кого не смущает? А перемещающее присваивание? Это не метод, а конструктор. Наложите ограничения на эту операцию, по которым адрес должен быть валиден и не может располагаться ни на стеке, ни в куче, а сама операция может быть применена только в конструкторе, который в этом случае не может быть использован для создания автоматических и динамических объектов, кроме того сама операция ещё и подразумевает проверку на совпадение старого и нового значений this и при несовпадении освобождение памяти размера sizeof(свой класс) по старому адресу, не может применяться в цикле, её наличие в тексте конструктора запрещает goto в точку до неё, она не может встречаться в тексте конструктора более одного раза. Что разрушит ООП? При этом я не утверждаю, что данное извращение хоть чем то лучше реального c++.
Re: Как запретить повторное использование конструктора?
Добавлено: 03 сен 2015, 11:51
Оксалайя
Сионист , мне кажется, Вы форумом ошиблись. Если хотите рассуждать о розовых единорогах с пушистыми гривами, пишущих на выдуманных языках - то Вам на форум любителей фэнтези. А тут все мыслят в категориях С++.
Re: Как запретить повторное использование конструктора?
Добавлено: 03 сен 2015, 12:01
Romeo
Сионист, извини, но это просто бессвязный поток слов. Дальнейший смысл спора теряется, так как мы разговариваем на разных языках. Прочти базовый курс С++, после этого продолжим, если в этом будет необходимость.
Re: Как запретить повторное использование конструктора?
Добавлено: 04 сен 2015, 07:33
Сионист
Я придумал, как выкрутиться, теперь если экземпляр создан повторным вызовом конструктора без ссылки, то конструктор со ссылкой и все операторы подставляют вместо него экземпляр, созданный при первом вызове этого конструктора, таким макаром имитируется синглитон Шредингера. Так как это класс чёрного ящика и отрытых полей он не имеет и иметь не может, то этого в принципе достаточно.
Re: Как запретить повторное использование конструктора?
Добавлено: 04 сен 2015, 07:34
Сионист
Romeo писал(а):Сионист, извини, но это просто бессвязный поток слов. Дальнейший смысл спора теряется, так как мы разговариваем на разных языках. Прочти базовый курс С++, после этого продолжим, если в этом будет необходимость.
Ну ка найди у меня хоть одно слово, не связанное хотябы с одним другим.
Re: Как запретить повторное использование конструктора?
Добавлено: 04 сен 2015, 07:34
Сионист
Оксалайя писал(а):Сионист , мне кажется, Вы форумом ошиблись. Если хотите рассуждать о розовых единорогах с пушистыми гривами, пишущих на выдуманных языках - то Вам на форум любителей фэнтези. А тут все мыслят в категориях С++.
Сингилтон - не категория c++, а паттерн ООП.
Re: Как запретить повторное использование конструктора?
Добавлено: 04 сен 2015, 08:26
Romeo
Сионист писал(а):Сингилтон - не категория c++, а паттерн ООП.
Сионист, сколько же можно ещё? Ты в своём сообщении написал впервые о синглтоне в контексте своего проекта,
написанного на С++. Я спросил, понял ли ты там, что написал. А потом разжевал в чём именно состоит глупость твоих высказываний касательно синглтона, который ты собирался добавить
в свой проект. Проект у тебя на С++ написан или на придуманном языке? Что же за упорство такое нечеловеческое?
Да, мало у тебя знаний по программированию, и они не академеческие. Там схватил, здесь схватил, тот термин запомнил, а этот слышал, да забыл. Ничего страшного в этом нет. Кто-то силён в одной дисциплине, а кто-то в другой. Я прекрасно понимаю, что программирование - это не твоя основная специализация. Просто возьми и признай нехватку знаний и начни прислушиваться к людям, у которых программирование - это работа, а не вспомогательный навык для написания диссертации.
Почему когда ты задаёшь вопрос на форуме, и тебе отвечают на него с искреннем желанием помочь, то ты вместо того, чтобы прислушаться к совету, начинаешь его критиковать? Причём критиковать, использую очень странную логику и выдёргивая отдельные факты из контекста и всячески пытаясь их утащить в другую область, которая тебе либо лучше знакома, либо просто позволяет выкрутиться из глупой ситуации, так как в ней данный термин имеет другое значение. Наш любимый синглтон - это лишь один из множества таких случаев. Ты что, не понимаешь, что при таком отношении желание помогать у опытных людей пропадает напрочь?
Re: Как запретить повторное использование конструктора?
Добавлено: 04 сен 2015, 09:05
Сионист
1. Что странного в том, что синглитон имеет смысл в рамках всего ООП?
2. В моём проекте нет и ни когда не будет настоящего синглтона.
3. Кавычки были сразу.