#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 // デストラクタとして呼び出されるこれがデータベースで仮想でない理由
データベース オブジェクトが破壊されました
注: ref を pref に置き換えると、すべて正常に動作します。つまり、sqlserver デストラクタは呼び出されません。