使用std :: move

时间:2019-04-15 13:55:07

标签: c++

代码:

#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。这怎么可能?

0 个答案:

没有答案