У меня вопрос по поводу следующего кода:
#include <iostream>
#include <boost/scoped_ptr.hpp>
class Interface
{
};
class A : public Interface
{
public:
A() { std::cout << "A()" << std::endl; }
virtual ~A() { std::cout << "~A()" << std::endl; }
};
Interface* get_a()
{
A* a = new A;
return a;
}
int main()
{
{
std::cout << "1" << std::endl;
boost::scoped_ptr<Interface> x(get_a());
std::cout << "2" << std::endl;
}
std::cout << "3" << std::endl;
}
Он создает следующий вывод:
1
A()
2
3
Как видите, он не вызывает деструктор AЕдинственный способ, которым я вижу, чтобы вызвать деструктор вызываемого A, это добавить деструктор для класса Interface следующим образом:
virtual ~Interface() { }
Но я действительно хочу избежать любой реализации в моем классе Interface и virtual ~Interface() = 0;
не работает (выдает некоторые ошибки компоновщика с жалобами на несуществующую реализацию ~Interface()
.
Итак, мой вопрос: что я должен изменить, чтобы вызвать деструктор, но (если возможно) оставить интерфейс как интерфейс (только абстрактные методы).