#include <iostream>
class Database
{
public:
Database()
{
std::clog << "Database object created " <<std::endl ;
}
~Database()
{
std::clog << "Database object destroyed " << std::endl;
}
virtual void Open(const std::string & ) = 0 ;
} ;
class SqlServer : public Database
{
public:
void Open(const std::string & conn)
{
std::clog << "Attempting to open the connection "<< std::endl ;
}
~SqlServer()
{
std::clog << "SqlServer:Database object destroyed "<< std::endl ;
}
} ;
int main()
{
Database &ref = SqlServer();
ref.Open("uid=user;pwd=default");
return 0 ;
}
输出
创建的数据库对象
尝试打开连接
SqlServer:Database object destroy // 为什么这个被称为析构函数在数据库中不是虚拟的
数据库对象被破坏
注意:如果我用 pref 替换 ref 那么一切正常,即不会调用 sqlserver 析构函数。