C++智慧指標

陈浩辉發表於2024-06-16

std::unique_ptr: 獨特所有權模型,一個std::unique_ptr在同一時間內只允許有一個物件例項。它不允許被複制,但可以被移動。
std::shared_ptr:共享所有權模型,多個std::shared_ptr可以指向同一物件,透過引用計數機制來管理物件的生命週期。當最後一個指向物件的std::shared_ptr被銷燬時,物件會被自動刪除。
std::weak_ptr:用於與std::shared_ptr配合使用,它不增加物件的引用計數,但可以訪問由std::shared_ptr管理的物件。std::weak_ptr主要用於解決std::shared_ptr可能導致的迴圈引用問題。

include

include

class MyClass {
public:
void doSomething() {
std::cout << "Doing something." << std::endl;
}
};

int main() {
// 使用 std::unique_ptr
std::unique_ptr uniquePtr(new MyClass());
uniquePtr->doSomething();

// 使用 std::shared_ptr
std::shared_ptr<MyClass> sharedPtr1(new MyClass());
std::shared_ptr<MyClass> sharedPtr2 = sharedPtr1; // 共享所有權
sharedPtr1->doSomething();

// 使用 std::weak_ptr
std::weak_ptr<MyClass> weakPtr = sharedPtr1;
if (auto lockedPtr = weakPtr.lock()) {
    lockedPtr->doSomething();
}

return 0;

}

相關文章