gpt4 book ai didi

c++ - move 构造函数不会被解雇

转载 作者:行者123 更新时间:2023-11-30 01:46:26 25 4
gpt4 key购买 nike

为什么在这个类中 move 构造函数没有被触发?

#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 ctor\n";
}

主要是:

#include "Movable.hpp"

int main()
{
auto m_var{ Movable<int>{} };
return 0;
}

发生的事情是,只有默认构造函数被触发。如果能解释一下为什么以及如何实现它,我们将非常高兴。

最佳答案

完全独立于复制和 move ,像这样的初始化允许完全忽略其中任何一个。这意味着对象是就地构建的。这是一种标准允许的“优化”。

关于c++ - move 构造函数不会被解雇,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33213705/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com