移动构造函数不会被触发
Move constructor doesn't get fired
为什么在这个类移动构造函数不被解雇?
#include <iostream>
#include <algorithm>
using std::cout;
template<class T>
class Movable
{
using value_type = T;
using pointer_type = T*;
const std::size_t init_size_{ 1 };
std::size_t current_size_{ init_size_ };
const value_type init_value_{ 0 };
pointer_type data_ = new value_type[init_size_]{init_value_};
public:
Movable();
Movable(Movable&&);
virtual ~Movable();
};
template<class T>
Movable<T>::Movable(Movable&& dead_meat)
{
data_ = dead_meat.data_;
current_size_ = dead_meat.current_size_;
dead_meat.data_ = nullptr;
dead_meat.current_size_ = 0;
cout << "Move ctor";
}
template<class T>
Movable<T>::Movable()
{
cout << "dflt ctorn";
}
和
#include "Movable.hpp"
int main()
{
auto m_var{ Movable<int>{} };
return 0;
}
所发生的是,只有默认构造函数被触发。如果你能解释一下为什么以及如何做到这一点,那就太好了。
完全独立于复制和移动,这样的初始化允许完全忽略。这意味着对象是就地构造的。这是一种标准允许的"优化"
相关文章:
- 为什么不调用移动构造函数?(默认情况下只有构造器,没有别的)
- std::vector::p ush_back() 不会在 MSVC 上编译具有已删除移动构造函数的对象
- 仅包含可移动 std::map 的类的移动构造函数不起作用
- 为什么调用复制构造函数而不是移动构造函数?
- 基类中的默认析构函数禁用子类中的移动构造函数(如果有成员)
- 从具有按值捕获的 lambda 移动构造 std::函数时,移动构造函数调用两次
- 具有已删除移动和复制构造函数的类的就地构造
- 移动构造函数和右值引用
- 使用移动调用对等构造函数unique_ptr默认构造函数
- 为什么 std::memmove 中联合的默认非平凡移动构造函数C++?
- 具有专用化的模板类中的可靠条件复制和移动构造函数
- 构造函数采用std::string_view与std::string并移动
- C++:为什么不调用移动构造函数?
- 了解构造函数在移动、复制、赋值语义中的行为
- 没有移动的构造函数移动课程
- 引用绑定和复制构造函数/移动构造函数
- 构造函数移动
- C++ 向量实现 - 移动构造函数 - 移动与前进
- 我真的必须取消移动构造函数/移动结构中的所有成员还是只是指针
- 将类(没有默认构造函数)移动到另一个类的move构造函数中