Fix copy constructors of Callback objects

->move() operator was not touching unused data fields, therefore
leaving uninitialised data and failing the comparison.
Fixed by initialising all fields to zero before moving.
pull/9424/head
Seppo Takalo 2019-01-29 15:18:03 +02:00
parent 9c98d1572b
commit 207eddc321
1 changed files with 6 additions and 0 deletions

View File

@ -94,6 +94,7 @@ public:
*/ */
Callback(const Callback<R()> &func) Callback(const Callback<R()> &func)
{ {
memset(this, 0, sizeof(Callback));
if (func._ops) { if (func._ops) {
func._ops->move(this, &func); func._ops->move(this, &func);
} }
@ -718,6 +719,7 @@ public:
*/ */
Callback(const Callback<R(A0)> &func) Callback(const Callback<R(A0)> &func)
{ {
memset(this, 0, sizeof(Callback));
if (func._ops) { if (func._ops) {
func._ops->move(this, &func); func._ops->move(this, &func);
} }
@ -1343,6 +1345,7 @@ public:
*/ */
Callback(const Callback<R(A0, A1)> &func) Callback(const Callback<R(A0, A1)> &func)
{ {
memset(this, 0, sizeof(Callback));
if (func._ops) { if (func._ops) {
func._ops->move(this, &func); func._ops->move(this, &func);
} }
@ -1969,6 +1972,7 @@ public:
*/ */
Callback(const Callback<R(A0, A1, A2)> &func) Callback(const Callback<R(A0, A1, A2)> &func)
{ {
memset(this, 0, sizeof(Callback));
if (func._ops) { if (func._ops) {
func._ops->move(this, &func); func._ops->move(this, &func);
} }
@ -2596,6 +2600,7 @@ public:
*/ */
Callback(const Callback<R(A0, A1, A2, A3)> &func) Callback(const Callback<R(A0, A1, A2, A3)> &func)
{ {
memset(this, 0, sizeof(Callback));
if (func._ops) { if (func._ops) {
func._ops->move(this, &func); func._ops->move(this, &func);
} }
@ -3224,6 +3229,7 @@ public:
*/ */
Callback(const Callback<R(A0, A1, A2, A3, A4)> &func) Callback(const Callback<R(A0, A1, A2, A3, A4)> &func)
{ {
memset(this, 0, sizeof(Callback));
if (func._ops) { if (func._ops) {
func._ops->move(this, &func); func._ops->move(this, &func);
} }