我的cpp文件(全局变量)顶部有这个智能指针:
std::unique_ptr<DATA_READ> smartPT(new DATA_READ);
如果智能指针在全局范围内声明,会发生什么情况?我知道函数中的智能指针在函数结束后会自动删除和释放内存,但是在多个函数中使用的全局范围智能指针怎么样?
它将在程序终止期间释放分配的内存。但是,将智能指针作为全局变量并不是一个好主意。
内存将在程序的整个生命周期内保持分配状态,除非采取特定操作来释放内存。从本质上讲,就好像智能指针的作用域是函数"main()"的作用域一样。这是来自 cplusplus.com
unique_ptr对象在它们本身被销毁后立即自动删除它们管理的对象(使用删除器),或者只要它们的值通过赋值操作或显式调用 unique_ptr::RESET) 发生更改。
具有静态持续时间的变量,因此将在加载此代码时分配内存,通常在应用程序启动时分配内存,并在应用程序完成时释放内存。如果在函数中使用它,通常应该分配它,除非它在另一个函数中被重置。
显然,考虑动态加载的库会有一些后果。
智能指针将在程序结束时与所有其他对象一样销毁。因此,当调用析构函数时,指针将被删除。她得到一个例子,它甚至不接近一个真正的智能指针,但它给出了一个想法:
#include <iostream>
using namespace std;
template <typename T>
struct example {
T* p_;
example(T* p): p_{p} {
cout << "example(T* p)n";
}
~example() {
cout << "~example()n";
delete p_;
}
};
int main() {
cout << "start mainn";
example<int> p{new int};
cout << "end mainn";
return 0;
}
在这里试试看:https://ideone.com/rOtQY9