powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / хитрое создание объектов - 2
11 сообщений из 11, страница 1 из 1
хитрое создание объектов - 2
    #33503406
alex_k
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вот еще что я придумал :)
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
struct A
{
//vla-bla-bla
};
int main()
{
 A* pa;
 {
  A a;//Объект создался
  pa=&a;//вот про эту строчку вопрос
 }//объект удалился
 delete pa;//а я хочу его сам удалить, а не автоматически
}


вопрос.
Можно ли сделать так, чтобы вот это присваивание
pa=&a;
перехватило объект, и объект не уничтожился при выходе из блока?
Я понимаю, он создается в стеке. Но я слышал, что можно как-то переопределить оператор new.
Но оператор new сдесь не используется.

Понятно ли объяснил? Можно ли? или глупость сморозил...
...
Рейтинг: 0 / 0
хитрое создание объектов - 2
    #33503419
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alex_k
Код: plaintext
1.
2.
  A a;//Объект создался
  pa=&a;//вот про эту строчку вопрос

а что мешает сделать
Код: plaintext
pa=new A;
?
...
Рейтинг: 0 / 0
хитрое создание объектов - 2
    #33503427
alex_k
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
да ничего не мешает.
вопрос был не в том, как мне отказаться от моей идеи, а в том, безумна ли моя идея, и если нет, то как ее реализовать :)
...
Рейтинг: 0 / 0
хитрое создание объектов - 2
    #33503433
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alex_kвопрос был не в том, как мне отказаться от моей идеи, а в том, безумна ли моя идея, и если нет, то как ее реализовать :)
имхо, она бессмысленна.
какой смысл заставлять компилятор использовать new неявно, если это можно и проще сделать явно?
...
Рейтинг: 0 / 0
хитрое создание объектов - 2
    #33503441
alex_k
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ну например класс A создает автоматически одного из своих мемберов класс B.
другой класс C, посторонний, хочет этого мембера похитить.
Ну, в смысле, использовать его для своих целей даже тогда, когда класс А уже будет уничтожен.
Скопировать - не всегда возможно. неизвестные private области, а сам класс В
копировать себя не хочет, допустим.
...
Рейтинг: 0 / 0
хитрое создание объектов - 2
    #33503455
kolobok0
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alex_k...другой класс C, посторонний, хочет этого мембера похитить....

единственность экземплярности инстанца класса, на мой взгляд интересно рассмотренна в книге Джэфа Элджера..."C++"

удачи Вам
(круглый)
...
Рейтинг: 0 / 0
хитрое создание объектов - 2
    #33503477
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alex_kну например класс A создает автоматически одного из своих мемберов класс B.
другой класс C, посторонний, хочет этого мембера похитить.
Ну, в смысле, использовать его для своих целей даже тогда, когда класс А уже будет уничтожен.
Скопировать - не всегда возможно. неизвестные private области, а сам класс В
копировать себя не хочет, допустим.
Ну если задача стоит именно так, то я бы попробовал создать свой экземпляр B внутри C, а потом подсунуть этот объект в A. Конечно кривое решение, но увы :)
А в реальности, если A создает внутренний объект B и не имеет никаких средств (или желания) отдать этот внутренний объект наружу... Ну тогда значит оно и не нужно :) Тогда пусть класс C создает свой собственный B и пытается скопировать из A.B в С.B все важные параметры.
...
Рейтинг: 0 / 0
хитрое создание объектов - 2
    #33503485
alex_k
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Все понял. Нельзя так нельзя :)

А вот было бы прикольно, разобрать класс на свойства при уничтожении :)
Типа как стол разбирается на ножки и столешницу :)
Становится 5 новых объектов, но стол уничтожается :)

Но это уже к делу не относится...
...
Рейтинг: 0 / 0
хитрое создание объектов - 2
    #33503493
alex_k
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а вот в догонку сабж :)

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
struct BASE
{
};
struct CHILD:public BASE
{
 CHILD(BASE* b)//вот какой-то конструктор, который 
//создет такой новый CHILD у которого BASE часть берется из
//переданного в конструктор BASE* b
 {
 };
};
int main()
{
 BASE *b=new BASE();
 CHILD *c=new CHILD(b);
};


То есть, модифицировать объект родитель в объект потомок :)
Можно?
...
Рейтинг: 0 / 0
хитрое создание объектов - 2
    #33503498
nikname
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Достаточно безумна идея.
new и delete ходят парой.
То, что вы написали похоже на:

A a, *pa, &ra;

*pa = &a;
...
delete pa;
или
ra = a;
...
delete &ra;


Дело в том, что локальные переменные отводятся на стеке и автоматически уничтожаются при потере видимости

...
{A a;
...
}
// Здесь A уже не видно, мало того, он разрушен и деструктор отработал
...


Очищать память нужно для тех объектов, память для которых выделена явно - malloc - free или new - delete. Эта память отводится на куче и может быть ( и должна (ну очень желательно) быть освобождениа.
...
Рейтинг: 0 / 0
хитрое создание объектов - 2
    #33503656
funikovyuri
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alex_k

1. Ты один и тот же объект удаляешь 2 раза, так что пример лишен смысла
2. У объектов созданных не с помощью new и delete есть строго определенная область жизни и видимости - это by design
3. Если тебе нужна возможность одновременного владения объекта несколькими другими объектами - то это задача для умных указателей с подсчетом ссылок (тут уже много раз обсужадись, например, тут)
...
Рейтинг: 0 / 0
11 сообщений из 11, страница 1 из 1
Форумы / C++ [игнор отключен] [закрыт для гостей] / хитрое создание объектов - 2
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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