add virtual destructors where needed

git-svn-id: https://swig.svn.sourceforge.net/svnroot/swig/trunk/SWIG@5873 626c5289-ae23-0410-ae9c-e8d60b6d4f22
This commit is contained in:
Marcelo Matus 2004-04-11 12:10:44 +00:00
commit f6340798c4
22 changed files with 55 additions and 4 deletions

View file

@ -2,6 +2,11 @@
%inline %{ %inline %{
class A { class A {
public:
virtual ~A()
{
}
private: private:
virtual int x() = 0; virtual int x() = 0;
protected: protected:

View file

@ -7,7 +7,11 @@
class Foo { class Foo {
public: public:
virtual int blah() = 0; virtual ~Foo()
{
}
virtual int blah() = 0;
}; };
class Bar : public Foo { }; class Bar : public Foo { };

View file

@ -7,6 +7,7 @@
class Foo { class Foo {
public: public:
virtual ~Foo() { }
virtual int blah() = 0; virtual int blah() = 0;
}; };

View file

@ -8,6 +8,10 @@
struct AbstractBaseClass struct AbstractBaseClass
{ {
virtual ~AbstractBaseClass()
{
}
virtual bool write(Engine& archive) const = 0; virtual bool write(Engine& archive) const = 0;
}; };

View file

@ -19,6 +19,8 @@
template <FieldDim Dim> template <FieldDim Dim>
struct Base struct Base
{ {
virtual ~Base() {}
typedef unsigned int size_type; typedef unsigned int size_type;
typedef Facet<Dim>* facet_ptr; typedef Facet<Dim>* facet_ptr;

View file

@ -6,6 +6,10 @@
%inline %{ %inline %{
struct A struct A
{ {
virtual ~A()
{
}
virtual int foo() = 0; virtual int foo() = 0;
}; };

View file

@ -5,6 +5,7 @@
%inline %{ %inline %{
class Foo { class Foo {
public: public:
virtual ~Foo() { }
virtual char *blah() = 0; virtual char *blah() = 0;
}; };

View file

@ -75,6 +75,8 @@ int test_prepost(int x, int y) {
%inline %{ %inline %{
class Foo { class Foo {
public: public:
virtual ~Foo() { }
virtual int test_preassert(int x, int y) { virtual int test_preassert(int x, int y) {
if ((x > 0) && (y > 0)) return 1; if ((x > 0) && (y > 0)) return 1;
return 0; return 0;
@ -140,6 +142,7 @@ public:
%inline %{ %inline %{
class A { class A {
public: public:
virtual ~A() {}
virtual int foo(int a, int b, int c, int d, int e) { virtual int foo(int a, int b, int c, int d, int e) {
if ((a > 0) && (b > 0) && (c > 0) && (d > 0) && (e > 0)) { if ((a > 0) && (b > 0) && (c > 0) && (d > 0) && (e > 0)) {
return 1; return 1;
@ -150,6 +153,7 @@ public:
class B { class B {
public: public:
virtual ~B() {}
virtual int bar(int a, int b, int c, int d, int e) { virtual int bar(int a, int b, int c, int d, int e) {
if ((a > 0) && (b > 0) && (c > 0) && (d > 0) && (e > 0)) { if ((a > 0) && (b > 0) && (c > 0) && (d > 0) && (e > 0)) {
return 1; return 1;

View file

@ -46,6 +46,7 @@ namespace Foo {
typedef int Integer; typedef int Integer;
class Test2 { class Test2 {
public: public:
virtual ~Test2() { }
virtual char *method() { virtual char *method() {
return (char *) "Test2::method"; return (char *) "Test2::method";
} }

View file

@ -9,9 +9,11 @@
class Foo { class Foo {
public: public:
virtual Foo *blah() { virtual ~Foo() { }
return this;
} virtual Foo *blah() {
return this;
}
}; };
%} %}

View file

@ -23,4 +23,5 @@ bar2(enum foo2 x) {}
void void
bar3(foo3 x) {} bar3(foo3 x) {}
%} %}

View file

@ -7,6 +7,7 @@
/* Define the class internally, but don't tell SWIG about it */ /* Define the class internally, but don't tell SWIG about it */
class Foo { class Foo {
public: public:
virtual ~Foo() {}
virtual char *blah() { virtual char *blah() {
return (char *) "Foo::blah"; return (char *) "Foo::blah";
} }
@ -21,6 +22,7 @@ class Foo;
class Bar : public Foo { class Bar : public Foo {
public: public:
virtual ~Bar() {}
virtual char *blah() { virtual char *blah() {
return (char *) "Bar::blah"; return (char *) "Bar::blah";
}; };

View file

@ -4,6 +4,8 @@
class A { class A {
public: public:
virtual ~A() { }
virtual void f(void) = 0; virtual void f(void) = 0;
}; };

View file

@ -15,6 +15,7 @@ private:
int x; int x;
public: public:
Foo() { x = 1; } Foo() { x = 1; }
virtual ~Foo() {}
virtual int xget() { return x; }; virtual int xget() { return x; };
}; };
typedef Foo *FooPtr; typedef Foo *FooPtr;
@ -26,6 +27,7 @@ private:
int y; int y;
public: public:
Bar() { y = 2; } Bar() { y = 2; }
virtual ~Bar() {}
virtual int yget() { return y; } virtual int yget() { return y; }
}; };

View file

@ -347,6 +347,11 @@ macro(size_t, pfx, sizet)
: var_pchar(0), var_pcharc(0), var_pint(0) : var_pchar(0), var_pcharc(0), var_pint(0)
{ {
} }
virtual ~Test()
{
}
%test_prim_types_stc(stc_decl, stc); %test_prim_types_stc(stc_decl, stc);
%test_prim_types(var_decl, var); %test_prim_types(var_decl, var);
var_decl(namet, var, namet); var_decl(namet, var, namet);

View file

@ -49,6 +49,7 @@ class D : public C {
/* Another abstract class */ /* Another abstract class */
class AA { class AA {
public: public:
virtual ~AA() { }
virtual void method2() = 0; virtual void method2() = 0;
}; };

View file

@ -6,6 +6,7 @@
{ {
struct A struct A
{ {
virtual ~A() { }
virtual int value(A*) = 0; virtual int value(A*) = 0;
int index; int index;
}; };

View file

@ -9,6 +9,7 @@ class MyHandle_Foo2 {
class Foo2 { class Foo2 {
public: public:
virtual ~Foo2() {}
virtual int sum(int i, int j) { return i+j; } virtual int sum(int i, int j) { return i+j; }
static int sum(int i, int j, int k); static int sum(int i, int j, int k);
}; };

View file

@ -7,6 +7,7 @@
template<class T> class Foo { template<class T> class Foo {
public: public:
virtual ~Foo() { }
virtual char *blah() { virtual char *blah() {
return (char *) "Foo"; return (char *) "Foo";
} }

View file

@ -11,6 +11,8 @@
class A class A
{ {
public: public:
virtual ~A() { }
virtual void say_hi() = 0; // only fails with pure virtual methods virtual void say_hi() = 0; // only fails with pure virtual methods
virtual void say_hello(); // this works fine virtual void say_hello(); // this works fine

View file

@ -1,9 +1,12 @@
// Inheritance through a typedef name // Inheritance through a typedef name
%module typedef_inherit %module typedef_inherit
%inline %{ %inline %{
class Foo { class Foo {
public: public:
virtual ~Foo () { }
virtual char *blah() { virtual char *blah() {
return (char *) "Foo::blah"; return (char *) "Foo::blah";
} }
@ -29,6 +32,7 @@ typedef struct {
} Spam; } Spam;
struct Grok : public Spam { struct Grok : public Spam {
virtual ~Grok() { }
virtual char *blah() { virtual char *blah() {
return (char *) "Grok::blah"; return (char *) "Grok::blah";
} }

View file

@ -4,6 +4,7 @@
class Foo { class Foo {
public: public:
int x; int x;
virtual ~Foo() { }
virtual Foo* blah() { return this; } virtual Foo* blah() { return this; }
}; };