在 CentOS 系统中使用 C++ 智能指针,首先需要确保你的编译器支持 C++11 或更高版本。智能指针是 C++11 引入的一种资源管理工具,它们可以帮助你自动管理动态分配的内存,从而避免内存泄漏。
C++ 标准库提供了几种智能指针类型,包括 std::unique_ptr
、std::shared_ptr
和 std::weak_ptr
。下面是如何在 CentOS 上使用这些智能指针的简单示例:
安装支持 C++11 的编译器(如果你还没有安装):
CentOS 默认可能安装的是较旧的 GCC 版本。为了使用 C++11 特性,你需要安装 GCC 4.8 或更高版本。可以使用以下命令安装:
sudo yum install centos-release-scl
sudo yum install devtoolset-7
scl enable devtoolset-7 bash
这将启用 Software Collections (SCL),并允许你使用 GCC 7。
编写使用智能指针的 C++ 代码:
创建一个名为 smart_pointers.cpp
的文件,并添加以下内容:
#include <iostream>
#include <memory>
class MyClass {
public:
MyClass() { std::cout << "MyClass constructor called" << std::endl; }
~MyClass() { std::cout << "MyClass destructor called" << std::endl; }
void doSomething() { std::cout << "Doing something" << std::endl; }
};
int main() {
// 使用 unique_ptr
std::unique_ptr<MyClass> uniquePtr(new MyClass());
uniquePtr->doSomething();
// 使用 shared_ptr
std::shared_ptr<MyClass> sharedPtr = std::make_shared<MyClass>();
sharedPtr->doSomething();
// 使用 weak_ptr 避免循环引用
std::weak_ptr<MyClass> weakPtr = sharedPtr;
if (auto lockedPtr = weakPtr.lock()) {
lockedPtr->doSomething();
}
return 0;
}
编译代码:
使用 g++ 编译器编译代码,并启用 C++11 标准:
g++ -std=c++11 smart_pointers.cpp -o smart_pointers
运行程序:
执行编译后的程序:
./smart_pointers
你应该会看到类似以下的输出:
MyClass constructor called
Doing something
MyClass constructor called
Doing something
Doing something
MyClass destructor called
MyClass destructor called
MyClass destructor called
这个例子展示了如何使用 std::unique_ptr
、std::shared_ptr
和 std::weak_ptr
。std::unique_ptr
用于独占资源所有权的场景,std::shared_ptr
用于共享资源所有权的场景,而 std::weak_ptr
则通常与 std::shared_ptr
一起使用,以避免循环引用导致的内存泄漏。