小编dwt*_*wto的帖子

即使定义了析构函数也进行移动操作

我读到了这个:

N3337 [class.copy]/9:如果类 X 的定义没有显式声明移动构造函数,则当且仅当

X 没有用户声明的复制构造函数,X 没有用户声明的复制赋值运算符,X 没有用户声明的移动赋值运算符,X 没有用户声明的析构函数,并且移动构造函数将不能隐式定义为已删除。声明析构函数并将其定义为默认值算作用户声明。

这里:默认的虚拟析构函数是否会阻止编译器生成的移动操作?

然而,这段代码:

struct A1 { virtual ~A1() {};  };

struct B1 : public A1 {
    ~B1() override {};  };

struct A2 { virtual ~A2() = default;  };

struct B2 : public A2 {
    ~B2() override = default;  };

struct A_NO_VIRTUAL {
    ~A_NO_VIRTUAL() {};  };

struct B_NO_VIRTUAL : public A_NO_VIRTUAL {
    ~B_NO_VIRTUAL() {};  };


int main() {  std::cout << std::is_nothrow_move_constructible_v<B1> << std::is_nothrow_move_constructible_v<B2> << std::is_nothrow_move_constructible_v<B_NO_VIRTUAL> << std::endl; }
Run Code Online (Sandbox Code Playgroud)

打印数量:111

请参阅:http …

c++

2
推荐指数
1
解决办法
75
查看次数

标签 统计

c++ ×1