全局范围内的智能指针
Smart pointer in global scope
我的 cpp 文件(全局变量)顶部有这个智能指针:
std::unique_ptr<DATA_READ> smartPT(new DATA_READ);
如果在全局范围内声明智能指针会怎样?我知道函数中的智能指针会在函数结束后自动删除和释放内存,但是在多个函数中使用的全局范围智能指针呢?
内存将在程序的整个生命周期内保持分配状态,除非采取特定操作释放内存。本质上就好像智能指针的作用域就是函数的作用域'main()'。这里来自 cplusplus.com
unique_ptr objects automatically delete the object they manage (using a deleter) as soon as they themselves are destroyed, or as soon as their value changes either by an assignment operation or by an explicit call to 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 main\n";
example<int> p{new int};
cout << "end main\n";
return 0;
}
在这里试试看:https://ideone.com/rOtQY9
总之,全局智能指针的使用让我望而却步。该程序已完成,因此无论如何都会将内存释放给 OS 。好消息是,无论在构建过程中获取了哪些资源,也肯定会释放(例如,可以正确关闭文件,或者可以刷新比特流缓冲区)。
我的 cpp 文件(全局变量)顶部有这个智能指针:
std::unique_ptr<DATA_READ> smartPT(new DATA_READ);
如果在全局范围内声明智能指针会怎样?我知道函数中的智能指针会在函数结束后自动删除和释放内存,但是在多个函数中使用的全局范围智能指针呢?
内存将在程序的整个生命周期内保持分配状态,除非采取特定操作释放内存。本质上就好像智能指针的作用域就是函数的作用域'main()'。这里来自 cplusplus.com
unique_ptr objects automatically delete the object they manage (using a deleter) as soon as they themselves are destroyed, or as soon as their value changes either by an assignment operation or by an explicit call to 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 main\n";
example<int> p{new int};
cout << "end main\n";
return 0;
}
在这里试试看:https://ideone.com/rOtQY9
总之,全局智能指针的使用让我望而却步。该程序已完成,因此无论如何都会将内存释放给 OS 。好消息是,无论在构建过程中获取了哪些资源,也肯定会释放(例如,可以正确关闭文件,或者可以刷新比特流缓冲区)。