c++智能指針有效管理動態(tài)分配內(nèi)存,避免內(nèi)存泄漏等問題。Linux下的C++開發(fā)通常借助
本文介紹三種常用智能指針:
#include <iostream> #include <memory> class MyClass { public: MyClass() { std::cout << "MyClass constructor called" << std::endl; } ~MyClass() { std::cout << "MyClass destructor called" << std::endl; } }; int main() { std::unique_ptr<MyClass> ptr(new MyClass()); // 使用ptr // ptr離開作用域時,MyClass對象自動銷毀 }
#include <iostream> #include <memory> class MyClass { public: MyClass() { std::cout << "MyClass constructor called" << std::endl; } ~MyClass() { std::cout << "MyClass destructor called" << std::endl; } }; int main() { std::shared_ptr<MyClass> ptr1(new MyClass()); { std::shared_ptr<MyClass> ptr2 = ptr1; // ptr1和ptr2共享同一對象 } // ptr2銷毀,但MyClass對象不會立即銷毀,因為ptr1仍然存在 // ptr1銷毀時,MyClass對象才銷毀 }
#include <iostream> #include <memory> class B; // Forward declaration class A { public: std::shared_ptr<B> b_ptr; ~A() { std::cout << "A destructor called" << std::endl; } }; class B { public: std::weak_ptr<A> a_ptr; ~B() { std::cout << "B destructor called" << std::endl; } }; int main() { std::shared_ptr<A> a(new A()); std::shared_ptr<B> b(new B()); a->b_ptr = b; b->a_ptr = a; // a和b銷毀時,A和B對象自動銷毀,避免循環(huán)引用 }
選擇智能指針類型需根據(jù)實際情況:unique_ptr適合單一所有權(quán)場景;shared_ptr適合共享所有權(quán)場景;weak_ptr則用于避免shared_ptr帶來的循環(huán)引用問題。