小编bb-*_*ion的帖子

boost :: scoped_ptr的C++析构函数问题

我对以下代码有疑问:

#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 …

c++ abstract-class destructor virtual-functions

2
推荐指数
1
解决办法
923
查看次数