在 C++ 中,智能指針通常有以下幾種使用方式:
使用 std::shared_ptr:
#include <memory>
int main() {
std::shared_ptr<int> ptr = std::make_shared<int>(10);
*ptr = 20; // 通過指針訪問對象
std::cout << *ptr << std::endl; // 輸出 20
return 0;
}
使用 std::unique_ptr:
#include <memory>
int main() {
std::unique_ptr<int> ptr = std::make_unique<int>(10);
*ptr = 20;
std::cout << *ptr << std::endl;
return 0;
}
使用 std::weak_ptr:
#include <memory>
int main() {
std::shared_ptr<int> sharedPtr = std::make_shared<int>(10);
std::weak_ptr<int> weakPtr = sharedPtr;
std::cout << *weakPtr.lock() << std::endl; // 輸出 10
sharedPtr.reset();
if (weakPtr.expired()) {
std::cout << "shared_ptr 已經被釋放" << std::endl;
}
return 0;
}
需要注意的是,當使用 std::shared_ptr 時,可以通過引用計數追蹤對象的所有權,而 std::unique_ptr 則是通過獨占所有權來實現的。而 std::weak_ptr 則允許對對象進行弱引用,不會增加引用計數,也不會阻止對象被銷毀。