C++ 如何实现每次移动构造函数以避免深度复制?
我正在练习每次通过传递R值来执行move构造函数。但有时会调用深度复制构造函数,但不支持它 我在向量中插入一个R值对象。此代码中的逻辑缺陷是什么 我已经试过调试,我不明白为什么在移动对象后调用深度复制构造函数C++ 如何实现每次移动构造函数以避免深度复制?,c++,c++14,move,deep-copy,C++,C++14,Move,Deep Copy,我正在练习每次通过传递R值来执行move构造函数。但有时会调用深度复制构造函数,但不支持它 我在向量中插入一个R值对象。此代码中的逻辑缺陷是什么 我已经试过调试,我不明白为什么在移动对象后调用深度复制构造函数 #include <iostream> #include <string> #include <vector> using namespace std; class example{ private: int *pointer; pub
#include <iostream>
#include <string>
#include <vector>
using namespace std;
class example{
private:
int *pointer;
public:
//constructor
example(int d){
pointer = new int;
*pointer = d;
cout<<"Constructor Called"<<endl;
}
// deep copy
example(const example &source){
pointer = new int;
*pointer= *source.pointer;
cout<<"deep copy made"<<endl;
}
// Move Constructor
example(example &&source):pointer{source.pointer}{
source.pointer = nullptr;
cout << "object moved"<<endl;
}
~example() {
delete pointer;
cout << "Destroyed"<<endl;
}
};
int main()
{
vector <example> vec;
vec.push_back(example{300});
vec.push_back(example{300});
vec.push_back(example{300});
vec.push_back(example{300});
return 0;
}
#包括
#包括
#包括
使用名称空间std;
课例{
私人:
int*指针;
公众:
//建造师
示例(int d){
指针=新整数;
*指针=d;
可以解决它吗?添加NOEXCEPT解决了这个问题
example(example &&source) noexcept :pointer{source.pointer} {
source.pointer = nullptr;
cout << "object moved"<<endl;
}
example(example&&source)noexcept:pointer{source.pointer}{
source.pointer=nullptr;
可以解决它吗?添加NOEXCEPT解决了这个问题
example(example &&source) noexcept :pointer{source.pointer} {
source.pointer = nullptr;
cout << "object moved"<<endl;
}
example(example&&source)noexcept:pointer{source.pointer}{
source.pointer=nullptr;
无法尝试将move构造函数更改为示例(示例和源代码)noexcept:
(其余都相同)但是noexcept做什么呢?我在我的课程教程中找到了它,但原因不是given@ZahidulAmin:noexcept允许库使用move。因为如果可能发生异常,它必须是可撤消的,才能使vector元素处于安全状态。请尝试将move构造函数更改为example(example&&source)noexcept:
(其余的都一样)但是noexcept做什么呢?我在我的课程教程中找到了它,但原因不是given@ZahidulAmin:noexcept允许库使用move。因为如果可能发生异常,它必须是可撤消的,才能使vector元素处于安全状态。