В проекте, который я унаследовал от coworker, у меня есть базовый класс c ++ с заголовком и реализацией.Для понимания приведу пример ситуации, поскольку сам код слишком велик: bthidtransport.h :
class BtHidTransport
{
public:
BtHidTransport(); // constructor
protected:
virtual ~BtHidTransport(); // destructor
} // BtHidTransport
bthidtransport.cpp :
BtHidTransport::BtHidTransport
{
} // constructor
BtHidTransport::~BtHidTransport()
{
} // destructor
Это базовый класс, теперь у нас есть заголовок производного класса:
bthidtransportfixes.h :
#include "bthidtransport.h"
class BtHidTransportFixes : public BtHidTransport
{
BtHidTransportFixes(); // constructor
virtual ~BtHidTransportFixes(); // destructor
} // BtHidTransportFixes
Однако, в конкретном проекте, BtHidTransportFixes не имеет файла реализации ( .cpp ).Сам проект строится без ошибок.Если я создаю экземпляр нового объекта во время выполнения из класса с:
BtHidTransport* createdObject=new BtHidTransportFixes();
и BtHidTransportFixes не имеет файла реализации ( .cpp ), каков порядок выполнения вусловия для родительского класса?Я использую Eclipse 4.3.2 для Windows (хост-ОС Windows 7 64bit Ultimate ) с ARM DS-5 5.20.2 компилятором.Нигде в проекте нет реализации BtHidTransportFixes
, я искал ее в ВСЕ файлы проектов .Оптимизация компилятора отключена с -O0 flags явно .Вот список ассемблера процесса сборки:
;;;107 // Create the BT transport first
;;;108 BtHidTransport *btTransport = new BtHidTransportFixes();
00002a 2088 MOVS r0,#0x88
00002c f7fffffe BL _ZN16StartupAllocatednwEj ; StartupAllocated::operator new(unsigned)
000030 4934 LDR r1,|L1.260|
000032 2200 MOVS r2,#0
000034 9100 STR r1,[sp,#0]
000036 4b34 LDR r3,|L1.264|
000038 4611 MOV r1,r2
00003a f7fffffe BL _ZN19BtHidTransportFixesC1EP9BtHidConnP13BtPairingListPK14tBTM_APPL_INFOPK23tBTM_LINK_EVT_CALLBACKS ; BtHidTransportFixes::BtHidTransportFixes()
00003e 4604 MOV r4,r0
и выход компоновщика:
Stack Usage for BtHidTransportFixes::BtHidTransportFixes() 0x0 bytes.
Stack Usage for BtHidTransportFixes::BtHidTransportFixes() 0x0 bytes.
Stack Usage for BtHidTransportFixes::BtHidTransportFixes__sub_object() unknown bytes.
BtHidTransportFixes::BtHidTransportFixes() 0x0020587d Thumb Code 0 20730_ram_ext.symdefs ABSOLUTE
BtHidTransportFixes::BtHidTransportFixes__sub_object() 0x0020587d Thumb Code 0 20730_ram_ext.symd
Размер конструктора, по-видимому, равен 0, какая точность здесь выполняется?И чтобы упростить, я намеренно удалил параметры конструктора (здесь, в описании проблемы StackOverflow), это плохо?