67 lines
1.1 KiB
C++
67 lines
1.1 KiB
C++
|
|
#include <stdio.h>
|
|
|
|
class Base
|
|
{
|
|
public:
|
|
Base(int k);
|
|
~Base();
|
|
virtual void foo() {}
|
|
private:
|
|
int k;
|
|
};
|
|
|
|
Base::Base(int k)
|
|
{
|
|
this->k = k;
|
|
}
|
|
|
|
Base::~Base()
|
|
{
|
|
printf("~Base\n");
|
|
}
|
|
|
|
class Derived : public virtual Base
|
|
{
|
|
public:
|
|
Derived(int i);
|
|
~Derived();
|
|
private:
|
|
int i;
|
|
int i2;
|
|
};
|
|
|
|
Derived::Derived(int i) : Base(i)
|
|
{
|
|
this->i = i;
|
|
/* The next statement is spread over two lines on purpose to exercise
|
|
a bug where breakpoints set on all but the last line of a statement
|
|
would not get multiple breakpoints.
|
|
The second line's text for gdb_get_line_number is a subset of the
|
|
first line so that we don't care which line gdb prints when it stops. */
|
|
this->i2 = // set breakpoint here
|
|
i; // breakpoint here
|
|
}
|
|
|
|
Derived::~Derived()
|
|
{
|
|
printf("~Derived\n");
|
|
}
|
|
|
|
class DeeplyDerived : public Derived
|
|
{
|
|
public:
|
|
DeeplyDerived(int i) : Base(i), Derived(i) {}
|
|
};
|
|
|
|
int main()
|
|
{
|
|
/* Invokes the Derived ctor that constructs both
|
|
Derived and Base. */
|
|
Derived d(7);
|
|
/* Invokes the Derived ctor that constructs only
|
|
Derived. Base is constructed separately by
|
|
DeeplyDerived's ctor. */
|
|
DeeplyDerived dd(15);
|
|
}
|