hirthwork 13.02.2012 17:41 mcabber

пстач, есть один объект... в общем, чтобы не утомлять, сразу к делу. как
избежать возможных утечек памяти при схеме передачи владения объектом как
здесь:
std::auto_ptr<int> a(new int);
std::auto_ptr<std::auto_ptr<int> >(new std::auto_ptr<int>(a.release()));

предупреждая наличие на пстаче таких же долбоёбов что и на #c++, хочу сказать:
нет, я не использую std::auto_ptr, это всего лишь иллюстрация.

Recommended by:

@Rayslava: Кастую 0xd34df00d для темплейт-извращений.

1. Rayslava 13.02.2012 17:57 Workstation

это они у тебя друг на друга ссылаются что-ли?

2. hirthworkRayslava /1 13.02.2012 17:58 mcabber

ты нихуя не понял

3. Rayslavahirthwork /2 13.02.2012 17:58 Workstation

Да.

4. Rayslavahirthwork /2 13.02.2012 18:01 Workstation

Аааа, я допёр что ты делаешь. Ты превратил указатель в указатель на указатель не трогая при этом объект?

5. hirthworkRayslava /4 13.02.2012 18:02 mcabber

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

6. Rayslavahirthwork /5 13.02.2012 18:03 Workstation

А почему тогда должна утекать память?

7. Rayslavahirthwork /5 13.02.2012 18:04 Workstation

И, да, почему промах-то? Всё верно. Был *int, стал **int. А сам int где лежал, там и лежит.

8. hirthworkRayslava /6 13.02.2012 18:05 mcabber

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

9. hirthworkRayslava /7 13.02.2012 18:05 mcabber

был int* стал std::auto_ptr<int>*

10. Rayslavahirthwork /8 13.02.2012 18:06 Workstation

Обрабатывать bad_alloc не вариант?

11. hirthworkRayslava /10 13.02.2012 18:07 mcabber

сам подумал, что сказал? я на каждый чих, что ли обрабатывать bad_alloc должен?

12. Rayslavahirthwork /11 13.02.2012 18:11 Workstation

Да. И это будет так корпоративно…
В общем, подождем дедфуда. У него в личкрафтах всё через такую же жопу закручено…

13. hirthworkRayslava /12 13.02.2012 18:12 mcabber

у него через недо-C++11 закручено

14. Rayslavahirthwork /13 13.02.2012 18:13 Workstation

А. Ну да. И буст.

15. Sany 13.02.2012 18:25 Home

очень просто:
std::auto_ptr<A> a(new A);
std::auto_ptr<std::auto_ptr<A> > b(new std::auto_ptr<A>());
b→reset(a.release());

16. hirthworkSany /15 13.02.2012 18:36 mcabber

вариант, но у меня reset нету и проще и красивее сделать через member-функцию, которая делает что-то типа ptr = new Storage(ptr);

17. Sanyhirthwork /16 13.02.2012 18:38 Home

ты пишешь свой смарт поинтер? всмысле нет reset?

18. hirthworkSany /17 13.02.2012 18:40 mcabber

я пишу свой рэйнджи, которые сделаны через pimpl. не зачем мне там reset

19. hirthworkhirthwork /18 13.02.2012 18:41 mcabber

*незачем

20. dorfe 13.02.2012 18:41

ппц ты всё не уймешься норкоман...

>я не использую std::auto_ptr, это всего лишь иллюстрация.

так пиши что используешь блеать.

21. hirthworkdorfe /20 13.02.2012 18:44 mcabber

вот что я использую: https://github.com/hirthwork/raingee/blo... (про багу с инициализацией от двух итераторов знаю, нечего мне тут кричать)

22. dorfehirthwork /21 13.02.2012 23:21

ппц, ну тут даже без коментариев, жопа-bcb-mixed-style + gpl это что-то сюрреалистическое, лучше б уже сразу локи брал.

23. hirthworkdorfe /22 14.02.2012 04:34 talkonaut-iphone_5.91_67b1c873

чо за хуйню ты несёшь? ты можешь заткнуться?

24. dorfehirthwork /23 14.02.2012 16:50

нет

Do you really want to delete ?