代码:
#include <iostream>
#include <memory>
class Test {
public:
void TestFunc() {
std::cout << "TestFunc()\n";
}
};
int main() {
std::unique_ptr<Test> ptr1(new Test);
ptr1->TestFunc();
std::unique_ptr<Test> ptr2 = std::move(ptr1);
ptr2->TestFunc();
if (ptr1 == nullptr) {
std::cout << "Now ptr1 is nullptr\n";
}
ptr1->TestFunc(); // !!
}
结果:
TestFunc()
TestFunc()
Now ptr1 is nullptr
TestFunc() // !!
就像上面的代码一样,Test
对象的所有权从ptr1
移到ptr2
。
但是,即使TestFunc()
在移动后已确认为ptr1
,我仍然可以通过ptr1
呼叫nullptr
。这怎么可能?