Заблокирован
|
|||||||||||
1 | |||||||||||
Можно ли удалить объект экземпляра класса из самого себя?18.11.2014, 15:10. Показов 14023. Ответов 67
Метки нет (Все метки)
Привет!
Допустим:
Добавлено через 4 минуты Вот так вроде работает, но как - то это ..... Так память нормально освобождается?
Добавлено через 4 минуты Нашёл себе методичку: http://www.parashift.com/c++-f... -this.html
0
|
18.11.2014, 15:10 | |
Ответы с готовыми решениями:
67
Можно ли создать объект класса с таким же именем как у самого класса? Удаление экземпляра класса в функции самого класса (Ошибка при отладке) как сделать чтобы объект производного класса сам себя добавлял в список или массив указателей базового класса? Можно ли заставить класс записывать самого себя в файл? |
Модератор
13507 / 10757 / 6412
Регистрация: 18.12.2011
Сообщений: 28,719
|
||||||
18.11.2014, 15:16 | 2 | |||||
Но тогда нельзя делать то, что я закомментировал:
1
|
Заблокирован
|
||||||
18.11.2014, 15:32 [ТС] | 3 | |||||
Само собой
Добавлено через 1 минуту Хмм, а по идее можно же переопределить как - то оператор delete для класса? Добавлено через 4 минуты
0
|
3257 / 2059 / 351
Регистрация: 24.11.2012
Сообщений: 4,909
|
|
18.11.2014, 15:37 | 4 |
0
|
Заблокирован
|
|
18.11.2014, 15:41 [ТС] | 5 |
Да... И COM вспоминает
Смысл в следующем: 1. В какой - то одной функции хочу создать объект 2. Передать указатель на него во множество других функций в разных потоках, при этом потеряв его в исходной функции их п.1. Ну просто функция из п.1 передаст указатели в другие функции в разных потоках и выйдет за SCOPE. 3. В других потоках в функциях "приёмниках" я что - то сделаю с этим экземпляром класса и потом вызову его Release(), в итоге хочу, чтоб после того, как все потоки что - то сделают с этим объектом, он самоудалился
0
|
3257 / 2059 / 351
Регистрация: 24.11.2012
Сообщений: 4,909
|
|
18.11.2014, 15:44 | 6 |
-THE_MASTER666-, классика. Решение сказал выше.
0
|
В астрале
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
|
||||||
18.11.2014, 15:48 | 7 | |||||
Сообщение было отмечено -THE_MASTER666- как решение
Решение
-THE_MASTER666-, Используйте shared_ptr.
1
|
Заблокирован
|
||||||
18.11.2014, 15:50 [ТС] | 8 | |||||
Не, ну понят но, что shared_prt делает то же самое, но только не понятно, как его в исходной функции потерять, чтоб он не самоунечтожился и чтоб был вылиден в других функциях...
Вот чтоб память не терялась, что тут сделать надо?
0
|
Заблокирован
|
|
18.11.2014, 15:57 [ТС] | 10 |
ForEveR, всё, понял, спасибо! Значит QSharedPointer глючит.
0
|
3257 / 2059 / 351
Регистрация: 24.11.2012
Сообщений: 4,909
|
|
18.11.2014, 15:57 | 11 |
delete
1
|
Заблокирован
|
|
18.11.2014, 16:09 [ТС] | 12 |
А можно буквально в двух словах, для чего нужен std::unique_ptr? Это синглтон что ли?
0
|
3257 / 2059 / 351
Регистрация: 24.11.2012
Сообщений: 4,909
|
|
18.11.2014, 16:10 | 13 |
Обертка над указателем для автоматического вызова delete при выходе из области видимости. Отсутствует счетчик ссылок и, как следствие, семантика разделяемого ресурса (несколько сущностей не могут владеть одним unique_ptr).
1
|
Заблокирован
|
|
18.11.2014, 16:16 [ТС] | 14 |
Ну это я понял - гуд.
Ну и ладно, то есть если я его во множество потоков передам, то он удалится сразу же после выхода за SCOPE первой завершённой поточной функции, если брать во за основу пример ForEveR ? Это как? То есть я его не смогу передать во множество потоков? Или смогу, но одновременно работать во множестве потоках с ним не смогу?
0
|
3257 / 2059 / 351
Регистрация: 24.11.2012
Сообщений: 4,909
|
|
18.11.2014, 16:22 | 15 |
У него нет ни конструктора копирования, ни оператора присваивания. Т.е. его можно только переместить.
Передать внутренний сырой указатель можно - но тогда приемник не сможет проверить его валидность, как и не сможет продлить время жизни объекта.
1
|
Заблокирован
|
|
18.11.2014, 16:31 [ТС] | 16 |
0
|
3257 / 2059 / 351
Регистрация: 24.11.2012
Сообщений: 4,909
|
|
18.11.2014, 16:32 | 17 |
Сообщение было отмечено -THE_MASTER666- как решение
Решение
1
|
Заблокирован
|
|
19.11.2014, 11:33 [ТС] | 18 |
Ладно, всё понял - спасибо
Добавлено через 18 часов 54 минуты А можно ли этот shared_ptr передавать из одной DLL в другую?
0
|
В астрале
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
|
|
19.11.2014, 12:20 | 19 |
Сообщение было отмечено -THE_MASTER666- как решение
Решение
Не отвечу точно. Предлагаю почитать: http://stackoverflow.com/quest... interfaces
1
|
Заблокирован
|
|
19.11.2014, 13:00 [ТС] | 20 |
Чё то я запутался
В общем попробовал поиграть с QSharedPointer, всё нормально передаётся из DLL в EXE и деструктор корректно вызывается после потери последней ссылки при выходе за скоп. Полагаю, что вообще в Qt с передачей данных DLL - EXE , как впрочем и использование шаблонов в DLL, всё тип топ, т.к. весь Qt построен на идеоме Pimpl, там повсюду private классы В общем раз работает, то темя исчерпана, всё равно я на Qt пишу Добавлено через 1 минуту Не по теме: ForEveR, нет какого - нибуть линка на статейку по собственному очень быстрому алокатору памяти?
0
|
19.11.2014, 13:00 | |
19.11.2014, 13:00 | |
Помогаю со студенческими работами здесь
20
Как можно удалить или очистить тело макроса после его исполнения из самого себя? Чем отличается объект класса от экземпляра класса Зацыкливания класса на самого себя Как экземпляру класса изменить тип самого себя? Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |