3 回答
TA貢獻1773條經驗 獲得超3個贊
std::vectornoexcept
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貢獻1805條經驗 獲得超9個贊
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貢獻1848條經驗 獲得超6個贊
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 {};
};Tnoexceptnoexcept
std::vector<move_only<MyClass>> vec;
- 3 回答
- 0 關注
- 502 瀏覽
添加回答
舉報
