add extended support for smart pointers
git-svn-id: https://swig.svn.sourceforge.net/svnroot/swig/trunk@8708 626c5289-ae23-0410-ae9c-e8d60b6d4f22
This commit is contained in:
parent
fd8401c506
commit
65728e968e
3 changed files with 60 additions and 1 deletions
|
|
@ -13,3 +13,20 @@ if a.ref_count() != 3:
|
|||
print "This program will crash... now"
|
||||
|
||||
|
||||
rca = b2.get_rca()
|
||||
b3 = B.create(rca)
|
||||
|
||||
if a.ref_count() != 5:
|
||||
print "This program will crash... now"
|
||||
|
||||
|
||||
v = vector_A(2)
|
||||
v[0] = a
|
||||
v[1] = a
|
||||
|
||||
x = v[0]
|
||||
del v
|
||||
|
||||
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
%module refcount
|
||||
|
||||
%warnfilter(362);
|
||||
%warnfilter(SWIGWARN_IGNORE_OPERATOR_EQ,SWIGWARN_LANG_IDENTIFIER);
|
||||
|
||||
%{
|
||||
#include <iostream>
|
||||
|
|
@ -20,6 +20,8 @@
|
|||
%newobject B::create(A* a);
|
||||
%newobject B::cloner();
|
||||
|
||||
|
||||
|
||||
%inline %{
|
||||
|
||||
struct A : RCObj
|
||||
|
|
@ -50,6 +52,15 @@
|
|||
struct A3 : A1, private A2
|
||||
{
|
||||
};
|
||||
|
||||
%}
|
||||
|
||||
#ifdef SWIGPYTHON
|
||||
%extend_smart_pointer(RCPtr<A>);
|
||||
%template(RCPtr_A) RCPtr<A>;
|
||||
#endif
|
||||
|
||||
%inline %{
|
||||
|
||||
struct B : RCObj
|
||||
{
|
||||
|
|
@ -75,8 +86,19 @@
|
|||
// std::cout << "deleting b" << std::endl;
|
||||
}
|
||||
|
||||
RCPtr<A> get_rca() {
|
||||
return _a;
|
||||
}
|
||||
|
||||
private:
|
||||
RCPtr<A> _a;
|
||||
};
|
||||
|
||||
%}
|
||||
|
||||
#ifdef SWIGPYTHON
|
||||
|
||||
%include <std_vector.i>
|
||||
%template(vector_A) std::vector<RCPtr<A> >;
|
||||
|
||||
#endif
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue