大家好,我刚刚看了一个关于 MOVE CONSTRUCTOR 的教程(比深度复制更好),我不太理解这些概念,我是初学者,不是专业人士,所以我需要你们的帮助来理解让我们开始: 首先是教程中的代码:
#include <iostream>
#include <vector>
using namespace std;
class Move {
private:
int *data;
public:
void set_data_value(int d) { *data = d; }
int get_data_value() { return *data; }
// Constructor
Move(int d);
// Copy Constructor
Move(const Move &source);
// Move Constructor
Move(Move &&source) noexcept;
// Destructor
~Move();
};
Move::Move(int d) {
data = new int;
*data = d;
cout << "Constructor for: " << d << endl;
}
// Copy ctor
Move::Move(const Move &source)
: Move {*source.data} {
cout << "Copy constructor - deep copy for: " << *data << endl;
}
//Move ctor
> **Move::Move(Move &&source) noexcept
> : data {source.data} {
> source.data = nullptr;
> cout << "Move constructor - moving resource: " << *data << endl;
> }**
好的,老师说的是“我们窃取数据并将指针清空,所以当我们将指针分配给 nullptre 时,我的问题发生了,它是否等于零,或者我们不能再达到它还是什么? ??”
Move::~Move() {
if (data != nullptr) {
cout << "Destructor freeing data for: " << *data << endl;
} else {
cout << "Destructor freeing data for nullptr" << endl;
}
delete data;
}
int main() {
vector<Move> vec;
vec.push_back(Move{10});
vec.push_back(Move{20});
vec.push_back(Move{30});
vec.push_back(Move{40});
vec.push_back(Move{50});
vec.push_back(Move{60});
vec.push_back(Move{70});
vec.push_back(Move{80});
return 0;
}
最佳答案
NULL
或多或少是简单时代的遗留物,当时 C++ 更接近其祖先 C。由于 C++ 第一次标准化(甚至更早),建议使用 0
表示空指针。 C++11 添加了 nullptr
,它是 0
和 NULL
的直接替代品。
但是 nullptr
的类型是 std::nullptr_t
这对于模板和函数参数(用于重载)很有用。
关于c++ - "nullptr"和 "NULL"的用例是什么以及区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62626889/