C++-一个C++类实现的问题
有一个类实现的主要问题。可你发现了吗?请指出,并尝试简要说明问题原因。
class Base
{
public:Base()
{
Init();
}
virtual void Init() = 0;
void Shutdown() throw(std::bad_alloc);
~Base()
{
Shutdown();
}
};
class Derived : public Base
{
public:Derived();
void Init();
void Shutdown();
~Derived()
{
Shutdown();
}
};
void DoSomething(std::auto_ptr<Base>) throw(std::exception);
void f()
{
try
{
std::auto_ptr<Base> b(new Derived);
DoSomething(b);
}
catch(const std::exception & e)
{
// ...
}
}
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
c++ inside object中有详细解释
1.public:Base() { Init(); }
这段错了。
基类的构造函数不要调用虚函数或含虚函数的函数.
构造函数这是还没有构造完成,是不能执行子类的虚函数的,如果Base的virtual void Init()=0 修改为非接口,那么子类就可以编译通过了,但是子类Derived 调用Base构造函数会执行Base的Init的,而不是执行Derived 这个的Init的。
2.std::auto_ptr<Base> b(new Derived);Base析构函数没有声明virtual
std::auto_ptr<Base> b(new Derived);Base析构函数没有声明virtual