기본 생성자 있고 없고의 차이가 너무 커요

프로그래밍 일반에 관한 포럼입니다.

Moderator: 류광

Locked
비회원

기본 생성자 있고 없고의 차이가 너무 커요

Post by 비회원 »

Code: Select all

class A
{

};

class B: public A
{

};

class C: public A
{
public:
    C()
   {

   }
};

int _tmain(int argc, _TCHAR* argv[])
{
   DWORD tick = GetTickCount();
   for(int i = 0; i < 1000000000; ++i)
   {
     dynamic_cast<A*>(&C());
   }
   std::cout << GetTickCount() - tick << '\n';

   tick = GetTickCount();
   for(int i = 0; i < 1000000000; ++i)
   {
     dynamic_cast<A*>(&B());
   }
   std::cout << GetTickCount() - tick << '\n';

   return 0;
}
기본 생성자를 컴파일러가 생성하는거 아니였나요?

E8400 램 2G XP sp3 Debug에서 각각 25초/2초 걸리네요
비회원

Post by 비회원 »

코드를 직접 돌려보지는 않았지만 디버그에서라면 당연한 것 같은데요.

B는 컴파일러가 직접 코드를 생성하므로 디버그 코드를 삽입할 필요가 없지만 C의 경우는 유저가 만든 코드이기 때문에 디버그 코드를 넣어야 하니까요. 이론적으로는 빈 함수에도 브레이크 포인트를 걸 수 있죠. 생성자가 불리는가의 여부를 확인해볼 수도 있는 일이니.

릴리즈에서도 확인해보시기 바랍니다. 하긴 릴리즈라면 아무 의미 없는 코드는 전부 삭제되니 그냥 0초가 나오려나요 ;
Locked