powered by simpleCommunicator - 2.0.59     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / Как спрятать кастинг под капот
11 сообщений из 86, страница 4 из 4
Как спрятать кастинг под капот
    #38080200
Фотография Lumix
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Undefined behaviorКонкретно вот в этом коде происходит реинтерпрет каст предка в наследника, как и во всех других ваших вариантах.

Что конкретно означает ваша фраза?? Какие практические выводы я могу сделать из этой фразы?? Мне чем-то эта фраза может помочь в решении задачи про автоматический даункастинг чужих объектов??
...
Рейтинг: 0 / 0
Как спрятать кастинг под капот
    #38080201
Фотография Lumix
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Edd.DragonLumixПотому что пользователям запрещено пользоваться new и delete
Это понятно. А внутри функции b() кому и почему запрещено пользоваться delete? Ровно в том месте, где ты принимаешь новый объект и знаешь, что старый можно удалить (на каком основании - тоже не ясно).

Edd.Dragon, у нас сейчас нет открытой задачи про удаление объектов. Задача про автоматическое удаление уже давно РЕШЕНА шарепоинтами. Нет уже этой задачи. Она решена. Вопрос закрыт.

Открытым вопрос остается только вот этот:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
class A { public: int u1; int u2; };
class B { public: A* a; B() : a(new A){}; };
class C : public B { public: B* b; C() : b(new B){}; };

int main()
{
    C* c = (C*) new B;
    int err = c->b->a->u1; // runtime err
    return 0;
}



Но тема автоматического даункастинга чужих объектов выходит за рамки конкретно этой темы, в которой мы сейчас находимся.
...
Рейтинг: 0 / 0
Как спрятать кастинг под капот
    #38080209
Undefined behavior
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
LumixUndefined behaviorКонкретно вот в этом коде происходит реинтерпрет каст предка в наследника, как и во всех других ваших вариантах.

Что конкретно означает ваша фраза?? Какие практические выводы я могу сделать из этой фразы?? Мне чем-то эта фраза может помочь в решении задачи про автоматический даункастинг чужих объектов??
Ну прочитайте, что там написано в моей фразе :)
...
Рейтинг: 0 / 0
Как спрятать кастинг под капот
    #38080213
Edd.Dragon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LumixEdd.Dragon, у нас сейчас нет открытой задачи про удаление объектов.
Так все же, кто мешает/мешал удалять старые объекты внутри функции b() вообще без всякого гемороя с автопоинтерами?
...
Рейтинг: 0 / 0
Как спрятать кастинг под капот
    #38080228
Фотография Lumix
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Edd.DragonLumixEdd.Dragon, у нас сейчас нет открытой задачи про удаление объектов.
Так все же, кто мешает/мешал удалять старые объекты внутри функции b() вообще без всякого гемороя с автопоинтерами?

если честно)))
на тот момент, когда на сцене появились шарепоинты и я ещё не придумал подкапот через аксессор
я просто не знал о таком решении

Код: plaintext
1.
B* b(B* b);



все мое внимание было сосредоточенно на этом варианте

Код: plaintext
1.
b(1) = b(2);



отчасти потому, что я ещё попутно искал решение для

Код: plaintext
1.
b() = a();



но сейчас, с высоты уже изученной темы да, можно сказать, что в принципе можно и без шарепоинтов обойтись

Код: plaintext
1.
B* b(B* b) {  if (globalStore) delete globalStore; return globalStore = b; }
...
Рейтинг: 0 / 0
Как спрятать кастинг под капот
    #38080230
Фотография Lumix
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
b(1, b(2)); // менее красиво для пользователей
b(1) = b(2); // более круто и более понятно
...
Рейтинг: 0 / 0
Как спрятать кастинг под капот
    #38080235
Фотография Lumix
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Undefined behaviorЧто конкретно означает ваша фраза?? Какие практические выводы я могу сделать из этой фразы?? Мне чем-то эта фраза может помочь в решении задачи про автоматический даункастинг чужих объектов??
Ну прочитайте, что там написано в моей фразе :)[/quot]

Реально, не сочтите за троллинг, но я не знаю какой можно сделать практический вывод из вашего высказывания...

вот ваша фраза

Конкретно вот в этом коде происходит реинтерпрет каст предка в наследника, как и во всех других ваших вариантах.

Я честно прочитал её 10 раз и не смог сделать никаких выводов. Честно!!
У меня только одна реакция: да, происходит, и чо??
А мне нужен автоматический безопасный даункаст
и как мне его получить???
я не знаю... и наверное ещё долго не узнаю...
...
Рейтинг: 0 / 0
Как спрятать кастинг под капот
    #38080241
Edd.Dragon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Lumixно сейчас, с высоты уже изученной темы да, можно сказать, что в принципе можно и без шарепоинтов обойтись

Код: plaintext
1.
B* b(B* b) {  if (globalStore) delete globalStore;



Вот теперь вопрос и для меня закрыт ))
...
Рейтинг: 0 / 0
Как спрятать кастинг под капот
    #38080243
Edd.Dragon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а был бы у вас вместо голой функции, ни на что особо не способной, объект - у вас бы ло куда больше свободы и гибкости. И данные в него засунуть можно, и операторы переопределить.
...
Рейтинг: 0 / 0
Как спрятать кастинг под капот
    #38080267
Фотография Lumix
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Edd.Dragonа был бы у вас вместо голой функции, ни на что особо не способной, объект - у вас бы ло куда больше свободы и гибкости. И данные в него засунуть можно, и операторы переопределить.

немного не догоняю...
был бы объект
вы имеете ввиду объект на месте которого сейчас объект под названием shared_ptr или какой объект вы имеете ввиду??


Edd.Dragonголой функции, ни на что особо не способной

во-первых, главная задача этой функции автоматически создавать объект при первом обращении. это гарантирует всегда создание объекта и освобождает пользователей от необходимости что-то создавать самим

во-вторых, за каждой этой функцией уже скрывается объект, который мы сами пишем и мы через множественное наследование можем к нему пришивать свои объекты, что мы собственно говоря и делаем

другой вопрос, что может быть вы вообще намекаете на путь, который я ещё не прорабатывал даже на идейной основе, а именно вот так

Код: plaintext
1.
B& b();



но у меня наверное сейчас уже сил не хватит этот кейс обдумать
...
Рейтинг: 0 / 0
Как спрятать кастинг под капот
    #38080300
Фотография Lumix
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Lumixдругой вопрос, что может быть вы вообще намекаете на путь, который я ещё не прорабатывал даже на идейной основе, а именно вот так

Код: plaintext
1.
B& b();





фейловая гипотеза оказалась....
ссылки запрещено переназначать, только указатели

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
#include <iostream>
using namespace std;

class A { };

A (*globalStore1) = 0, (*globalStore2) = 0;
A& a1() { return *(globalStore1 = globalStore1 ? globalStore1 : new A()); }
A& a2() { return *(globalStore2 = globalStore2 ? globalStore2 : new A()); }

int main()
{
    a1() = a2();
    cout << (&a1() == &a2()); // false, а должно быть true...
    return 0;
}
...
Рейтинг: 0 / 0
11 сообщений из 86, страница 4 из 4
Форумы / C++ [игнор отключен] [закрыт для гостей] / Как спрятать кастинг под капот
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]