std::shared_ptr 是否能使用 extern
时间: 2023-07-27 14:07:33 浏览: 259
`std::shared_ptr` 本身是一个模板类,定义时需要提供指向的对象类型,因此不支持 `extern` 关键字。
`extern` 关键字用于声明外部变量,表示该变量定义在其他文件中,可以在当前文件中引用和使用。而 `std::shared_ptr` 是一个 C++ 标准库中的类模板,需要在使用时包含头文件 `<memory>`,并且需要在当前文件中显式地定义和初始化该智能指针变量。
如果需要在多个文件中共享同一个 `std::shared_ptr` 变量,可以将该变量定义为全局变量或静态变量,并且需要在一个文件中定义和初始化该变量,其他文件中可以通过 `extern` 关键字声明该变量并引用它。例如:
```
// example.h
#include <memory>
extern std::shared_ptr<int> global_ptr;
// example.cpp
#include "example.h"
std::shared_ptr<int> global_ptr = std::make_shared<int>(42); // 定义和初始化全局智能指针变量
// other.cpp
#include "example.h"
void foo() {
if (global_ptr) {
std::cout << "global_ptr is not empty" << std::endl;
}
}
```
上述代码中,定义了一个全局的 `std::shared_ptr<int>` 变量 `global_ptr`,并且在 `example.cpp` 文件中进行了初始化。在其他文件中,通过 `extern` 关键字声明该全局变量,并且可以在函数中引用和使用该变量。
阅读全文