I've some Base class in c++. I export it into python using boost::python. But how about virtual destructor? Any base class must have virtual destructor to prevent wrong memory clearing, right? I ignore might authored Base without destructor. Everything works, but with many different memory leaks.

Now I have added:

class Base
{
   public:
      virtual ~Base();
      // Other members...
};

And after posting of my module in python I recieve a mistake:

ImportError: Base.so: undefined symbol: _ZTI6Base

What I am doing wrong? And, when i understand, the mistake causes because of missing destructor exporter for py-module.

The missing symbol error is most likely triggered on your part neglecting to define the destructor (you are proclaiming the destructor, but it is unclear out of your wonder if you are determining it):

class Base
{
   public:
      virtual ~Base() {}
      // Other members...
};

(note the additional curly braces)

Regarding your question about whether every "base class must have virtual destructor to prevent wrong memory clearing", please have a look in the FAQ: http://www.parashift.com/c++-faq-lite/virtual-functions.html#faq-20.7

You can simply do

class Base
{
   public:
      virtual ~Base() {}
      // Other members...
};

to make certain the destructor is determined