Pin AutoTypeAction's vtable to a translation unit

AutoTypeAction class had no out-of-line definitions and because of this
the compiler would place its vtable everywhere the class is used.
By simply defining the virtual destructor in the .cpp file, the issue
goes away.

Also, a few classes derived from AutoTypeAction had missing 'override'
qualifiers, which have now been added.
This commit is contained in:
Gianluca Recchia 2018-10-27 04:38:10 +02:00
parent 09fbb6d35a
commit 7a823e8dc7
No known key found for this signature in database
GPG Key ID: 3C2B4128D9A1F218
2 changed files with 15 additions and 11 deletions

View File

@ -87,3 +87,9 @@ void AutoTypeExecutor::execClearField(AutoTypeClearField* action)
{
Q_UNUSED(action);
}
AutoTypeAction::~AutoTypeAction()
{
// This makes sure that AutoTypeAction's vtable is placed
// in this translation unit.
}

View File

@ -29,19 +29,17 @@ class AutoTypeExecutor;
class KEEPASSX_EXPORT AutoTypeAction
{
public:
virtual ~AutoTypeAction()
{
}
virtual AutoTypeAction* clone() = 0;
virtual void accept(AutoTypeExecutor* executor) = 0;
virtual ~AutoTypeAction();
};
class KEEPASSX_EXPORT AutoTypeChar : public AutoTypeAction
{
public:
explicit AutoTypeChar(const QChar& character);
AutoTypeAction* clone();
void accept(AutoTypeExecutor* executor);
AutoTypeAction* clone() override;
void accept(AutoTypeExecutor* executor) override;
const QChar character;
};
@ -50,8 +48,8 @@ class KEEPASSX_EXPORT AutoTypeKey : public AutoTypeAction
{
public:
explicit AutoTypeKey(Qt::Key key);
AutoTypeAction* clone();
void accept(AutoTypeExecutor* executor);
AutoTypeAction* clone() override;
void accept(AutoTypeExecutor* executor) override;
const Qt::Key key;
};
@ -60,8 +58,8 @@ class KEEPASSX_EXPORT AutoTypeDelay : public AutoTypeAction
{
public:
explicit AutoTypeDelay(int delayMs);
AutoTypeAction* clone();
void accept(AutoTypeExecutor* executor);
AutoTypeAction* clone() override;
void accept(AutoTypeExecutor* executor) override;
const int delayMs;
};
@ -70,8 +68,8 @@ class KEEPASSX_EXPORT AutoTypeClearField : public AutoTypeAction
{
public:
AutoTypeClearField();
AutoTypeAction* clone();
void accept(AutoTypeExecutor* executor);
AutoTypeAction* clone() override;
void accept(AutoTypeExecutor* executor) override;
};
class KEEPASSX_EXPORT AutoTypeExecutor