我对以下代码有疑问:
#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;
}
Run Code Online (Sandbox Code Playgroud)
它创建以下输出:
1
A()
2
3
Run Code Online (Sandbox Code Playgroud)
正如您所看到的,它不会调用A的析构函数.我看到获取A的析构函数的唯一方法是为Interface类添加一个析构函数,如下所示:
virtual ~Interface() { }
Run Code Online (Sandbox Code Playgroud)
但我真的想避免在我的接口类中的任何实现并且virtual …