Warum löst dieser virtuelle Destruktor ein ungelöstes externes Objekt aus?
Folgendes berücksichtigen
Im X.h:
class X
{
X();
virtual ~X();
};
X.cpp:
#include "X.h"
X::X()
{}
Versuchen Sie, dies zu erstellen (ich verwende ein DLL-Ziel, um einen Fehler auf dem fehlenden Haupt zu vermeiden, und ich verwende Visual Studio 2010):
Error 1 Fehler LNK2001: nicht aufgelöstes externes Symbol "privat: virtuell __thiscall X :: ~ X (void)" (?? 1X @@ EAE @ XZ)
Kleine Änderungen führen jedoch zu einem erfolgreichen Build:
X.h:
class X
{
inline X(); // Now inlined, and everything builds
virtual ~X();
};
ode
X.h:
class X
{
X();
~X(); // No longer virtual, and everything builds
};
Was verursacht das nicht aufgelöste externe Element im Linker, wenn das .dtor-Objekt virtuell ist oder wenn das .ctor-Objekt nicht eingebettet ist?
BEARBEITEN
Oder vielleicht interessanter, warum mache ichnich bekomme eine ungelöste externe, wenn ich den Destruktor nicht-virtuell mache oder wenn ich den Konstruktor inline?