3 回答

TA貢獻(xiàn)1773條經(jīng)驗(yàn) 獲得超3個(gè)贊
std::vector
noexcept
std::vector
:
A(A && rhs) noexcept { std::cout << "i am the move constr" <<std::endl; ... some code doing the move ... m_value=std::move(rhs.m_value) ; // etc... }
noexcept
, std::vector
emplace_back
編輯
A(A && rhs) = default;

TA貢獻(xiàn)1805條經(jīng)驗(yàn) 獲得超9個(gè)贊
noexcept
struct foo { foo() {} foo( const foo & ) noexcept { std::cout << "copy\n"; } foo( foo && ) noexcept { std::cout << "move\n"; } ~foo() noexcept {} }; int main() { std::vector< foo > v; for ( int i = 0; i < 3; ++i ) v.emplace_back(); }
move move move
noexcept
~foo()
copy copy copy

TA貢獻(xiàn)1848條經(jīng)驗(yàn) 獲得超6個(gè)贊
std::vector
std::vector
template<class T> class move_only : public T{ public: move_only(){} move_only(const move_only&) = delete; move_only(move_only&&) noexcept {}; ~move_only() noexcept {}; using T::T; };
template<class T> struct move_only{ T value; template<class Arg, class ...Args, typename = std::enable_if_t< !std::is_same_v<move_only<T>&&, Arg > && !std::is_same_v<const move_only<T>&, Arg > >> move_only(Arg&& arg, Args&&... args) :value(std::forward<Arg>(arg), std::forward<Args>(args)...) {} move_only(){} move_only(const move_only&) = delete; move_only(move_only&& other) noexcept : value(std::move(other.value)) {}; ~move_only() noexcept {}; };
T
noexcept
noexcept
std::vector<move_only<MyClass>> vec;
- 3 回答
- 0 關(guān)注
- 491 瀏覽
添加回答
舉報(bào)