Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
Разработка программного обеспечения

How can I wrap a function which needs to take ownership of a raw pointer?

Boost , Boost.Python , Chapter 4. Frequently Asked Questions (FAQs)

Boost C++ Libraries

...one of the most highly regarded and expertly designed C++ library projects in the world. Herb Sutter and Andrei Alexandrescu, C++ Coding Standards

PrevUpHomeNext

Q:Часть API, которую я заворачиваю, выглядит примерно так:

struct A {}; struct B { void add( A* ); }
where B::add() takes ownership of the pointer passed to it.

Однако:

a = mod.A()
b = mod.B()
b.add( a )
del a
del b
# python interpreter crashes
# later due to memory corruption.

Даже связывание времени жизни от a до b через<with_custodian_and_ward>не мешает объекту питона a в конечном итоге попытаться удалить объект, на который он указывает. Есть ли способ осуществить «передачу владения» обернутым объектом C++?

Брюс Лоуэри

Да: Убедитесь, что объект C++ удерживается auto_ptr:

class_<A, std::auto_ptr<A> >("A")
  ...
  ;

Затем сделайте тонкую функцию обертки, которая принимает параметр auto_ptr:

void b_insert(B &b, std::auto_ptr<A> a)
{
  b.insert(a.get());
  a.release();
}

Заверните это как B.add. Обратите внимание, что указатели, возвращенные через<manage_new_object>, также будут удерживаться<auto_ptr>, поэтому эта передача права собственности также будет работать правильно.


PrevUpHomeNext

Статья How can I wrap a function which needs to take ownership of a raw pointer? раздела Boost.Python Chapter 4. Frequently Asked Questions (FAQs) может быть полезна для разработчиков на c++ и boost.




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.



:: Главная :: Chapter 4. Frequently Asked Questions (FAQs) ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-08-30 11:47:00
2025-05-20 01:27:32/0.005443811416626/1