我遇到了一个问题,当其子类具有显式默认析构函数时,超类的移动构造函数无法正确调用。当析构函数被隐式默认时(在超类定义中根本没有提供),移动构造函数确实会被调用。
我知道编译器应该应用于默认移动构造函数的限制。然而,我无论如何都确信编译器在应用这些规则时不应该区分显式/隐式默认的析构函数(或构造函数)。换句话说,显式默认的析构函数不应被视为用户定义的析构函数(与空的用户定义析构函数相反)。
仅使用 MSVC 2019 进行测试。
我还是 MSVC 在这儿吗?
#include <iostream>
class A {
public:
A() = default;
A(const A&) { std::cout << "Auch, they'r making copy of me(?!)" << std::endl; }
A(A&&) { std::cout << "I am moving :)" << std::endl; }
~A() = default;
};
class B : public A {
public:
};
class C : public A {
public:
C() = default;
};
class D : public A {
public:
~D() = default; …Run Code Online (Sandbox Code Playgroud)