在C++中,智能指针是一种用于自动管理动态分配内存的类模板,能够有效防止内存泄漏。本文将详细介绍两种常用的智能指针:unique_ptr和shared_ptr,并对比它们的应用场景和性能。
unique_ptr是C++11引入的一种独占所有权的智能指针,意味着同一时间内只能有一个unique_ptr拥有对某个资源的控制权。它不允许复制,但允许移动语义。
#include <memory>
#include <iostream>
class MyClass {
public:
MyClass() { std::cout << "MyClass Constructor" << std::endl; }
~MyClass() { std::cout << "MyClass Destructor" << std::endl; }
};
int main() {
std::unique_ptr ptr = std::make_unique();
// ptr 会自动释放 MyClass 对象
return 0;
}
shared_ptr是C++11引入的一种共享所有权的智能指针,通过引用计数机制管理动态分配的资源。当最后一个shared_ptr被销毁或重置时,资源才会被释放。
#include <memory>
#include <iostream>
class MyClass {
public:
MyClass() { std::cout << "MyClass Constructor" << std::endl; }
~MyClass() { std::cout << "MyClass Destructor" << std::endl; }
};
int main() {
std::shared_ptr ptr1 = std::make_shared();
std::shared_ptr ptr2 = ptr1; // 共享所有权
// 当 ptr1 和 ptr2 都超出作用域时,MyClass 对象才会被释放
return 0;
}
在C++中,unique_ptr和shared_ptr都是强大的内存管理工具,但它们各有优缺点。了解它们的应用场景和性能特性,有助于开发者编写更高效、更安全的代码。