.net - VC++/CLI: How to prevent an unmanaged object from being destroyed when it goes out of scope? -
i have third-party unmanaged c++ library has 2 classes, let's call them classa
, classb
. classa
has method, let's call gettheb()
, returns instance of classb
- not return pointer instance, instance itself.
i wrote managed wrapper classa
in turn has method gettheb()
returns managed wrapper wrapping classb
.
the original classb
object third-party library has handed on managed wrapper via pointer, like:
thirdparty::classb db = delegateforclassa -> gettheb(); managedclassb^ mb = gcnew managedclassb(&db);
however, when wrapped gettheb()
of classa
wrapper finishes , scope ends, managedclassb
instance contains dangling reference third-party classb
, destructor of latter 1 called, leading funny results when accessing methods of classb
.
in other question, told somehow store original classb
object, don't know how.
so, how keep third-party classb
instance alive?
you can either change gettheb return heap-allocated classb, or have managedclassb make own copy of db object.
update copy:
i assume managedclassb's constructor looks like
public ref class managedclassb { public: managedclassb(classb* p) : m_p(p) { } ... private: classb* m_p; };
you should change to
public ref class managedclassb { public: managedclassb(const classb& b) : m_b(b) { } ... private: classb m_b; };
or
public ref class managedclassb { public: managedclassb(classb* p) : m_p(new classb(*p)) { } ... private: classb* m_p; };
Comments
Post a Comment