C++智能指针实例详解
作者:野牛程序员:2024-01-22 17:49:40 C++阅读 2946
智能指针是C++中用于管理动态分配的内存的工具,有助于避免内存泄漏和提高代码的安全性。以下是C++中两种常用的智能指针类型的简要示例:std::shared_ptr 和 std::unique_ptr。
std::shared_ptr 示例:
#include <iostream>
#include <memory>
class MyClass {
public:
MyClass(int val) : value(val) {
std::cout << "构造函数,数值: " << value << std::endl;
}
~MyClass() {
std::cout << "析构函数,数值: " << value << std::endl;
}
void display() {
std::cout << "数值: " << value << std::endl;
}
private:
int value;
};
int main() {
// 创建 shared_ptr,自动管理内存
std::shared_ptr<MyClass> sharedPtr = std::make_shared<MyClass>(42);
// 多个 shared_ptr 共享同一块内存
std::shared_ptr<MyClass> sharedPtr2 = sharedPtr;
// 使用 shared_ptr
sharedPtr->display();
sharedPtr2->display();
// shared_ptr 在不再需要时自动释放内存
return 0;
}std::unique_ptr 示例:
#include <iostream>
#include <memory>
class MyUniqueClass {
public:
MyUniqueClass(int val) : value(val) {
std::cout << "构造函数,数值: " << value << std::endl;
}
~MyUniqueClass() {
std::cout << "析构函数,数值: " << value << std::endl;
}
void display() {
std::cout << "数值: " << value << std::endl;
}
private:
int value;
};
int main() {
// 创建 unique_ptr,独占所有权
std::unique_ptr<MyUniqueClass> uniquePtr = std::make_unique<MyUniqueClass>(73);
// 使用 unique_ptr
uniquePtr->display();
// unique_ptr 不允许复制所有权,以下行将导致编译错误
// std::unique_ptr<MyUniqueClass> uniquePtr2 = uniquePtr;
// 在离开作用域时,unique_ptr 自动释放内存
return 0;
}这两个示例分别演示了 std::shared_ptr 和 std::unique_ptr 的基本用法。根据需求,选择适合场景的智能指针类型。
野牛程序员教少儿编程与信息学奥赛-微信|电话:15892516892

