Когда унаследованный код конструктора называется - PullRequest
0 голосов
/ 15 апреля 2011

Если конструктор моего класса наследует параметризованный конструктор другого класса, будет ли этот унаследованный код конструктора выполняться до или после кода, который я помещаю в мой конструктор?

Например, в этом:

TCurrentKillerThread::TCurrentKillerThread() : TThread(true){
  CurrentKillerMutex = CreateMutex(NULL,true,NULL); // protect thread 
  try {
     Write("Created Current Killer");
  } __finally {
    ReleaseMutex(CurrentKillerMutex);
  }
  Start();
}

Будет ли TThread(true) выполняться до того кода, который у меня есть в TCurrectKillerThread()?

Ответы [ 4 ]

2 голосов
/ 15 апреля 2011

Да.Родительский класс всегда инициализируется перед производным.Вы не наследуете конструктор - вы его вызываете.

0 голосов
/ 15 апреля 2011

Конечно, конструктор базового класса выполняется перед конструктором подкласса, а деструктор выполняется из подкласса в базовый класс

0 голосов
/ 15 апреля 2011

Будет ли TThread (true) выполняться перед кодом, который у меня есть в TCurrectKillerThread ()?

Да, TThread(bool var){ .... } выполняется до TCurrentKillerThread(){ .... }, когда создается экземпляр производного объекта. Создание подобъекта родительского класса должно происходить до подобъекта производного класса в C ++.

0 голосов
/ 15 апреля 2011

Да, конструкция C ++ работает от самого низкого базового класса до самого производного.

...