Code:
#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(); // !!
}
Result:
TestFunc()
TestFunc()
Now ptr1 is nullptr
TestFunc() // !!
Like above code, the ownership of Test
object is moved from ptr1
to ptr2
.
However, still I can call TestFunc()
through ptr1
even though ptr1
has confirmed as nullptr
after moving. How is this possible?