相关疑难解决方法(0)

移动成员函数生成

码:

#include <iostream>
#include <ios>
#include <string>
#include <type_traits>
#include <memory>

struct value
{
    ~value() = default;
    std::unique_ptr<std::string> s;
};

int main()
{
    std::cout << std::boolalpha;
    std::cout << std::is_move_constructible<value>::value << '\n';
    std::cout << std::is_move_assignable<value>::value    << '\n';

    using str_ptr = std::unique_ptr<std::string>;
    std::cout << std::is_move_constructible<str_ptr>::value << '\n';
    std::cout << std::is_move_assignable<str_ptr>::value    << '\n';

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

输出(使用g ++ v4.7.2编译,http://ideone.com/CkW1tG ):

false
false
true
true

正如我所料,value不是可移动的,也不是可移动的,因为:

~value() = default;
Run Code Online (Sandbox Code Playgroud)

是一个用户声明的析构函数,它根据第12.8节(见下文)阻止隐式生成移动成员.如果析构函数被删除,那么value就像我期望的那样(http://ideone.com/VcR2eq)可移动构造并移动可分配.

但是,当定义value …

c++ language-lawyer c++11

12
推荐指数
1
解决办法
599
查看次数

标签 统计

c++ ×1

c++11 ×1

language-lawyer ×1