#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을 열려고
생성 : 데이터베이스 객체가 파괴되었습니다 // 데이터베이스에서 가상 객체가 아닌 소멸자로 호출되는 이유
데이터베이스 객체가 파괴되었습니다.
참고 : ref로 바꾸면 pref로 처리하면 sqlserver 소멸자가 호출되지 않습니다.
악의적 인 MSVC 확장으로 인해 코드가 컴파일됩니다. 일반적으로 ** 임시 **를 참조에 바인딩 할 수 없습니다. 나는 그것이 당신의 질문의 주요 초점이기 때문에 그것을 굵게했습니다. – chris