c++智能指针有效管理动态分配内存,避免内存泄漏等问题。Linux下的C++开发通常借助
本文介绍三种常用智能指针:
#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对象自动销毁,避免循环引用 }
选择智能指针类型需根据实际情况:unique_ptr适合单一所有权场景;shared_ptr适合共享所有权场景;weak_ptr则用于避免shared_ptr带来的循环引用问题。