何时将为指向动态创建的内存的静态指针创建内存
When memory will be created for static pointer pointing to dynamically created memory?
何时为ptr
指向myClass
对象创建内存?以下单例线程安全吗?
Class myClass
{
static myClass* ptr;
public:
myClass(){}
~myClass(){}
static myClass* getPtr();
};
myClass* myClass::ptr = new myClass();
myClass* myClass::getPtr()
{
return ptr;
}
int main()
{
myClass* temp = myClass::getPtr();
return 0;
}
何时将为 ptr 指向的 myClass 对象创建内存?
在动态初始化阶段,main
开始之前。当心初始化顺序的惨败:它可能不会在其他翻译单元中的其他静态变量之前创建,因此如果他们的初始化器试图访问它,您可能会遇到大问题。
以下单音螺纹安全吗?
如果您在main
开始之前没有启动任何线程,那么是的。如果另一个静态变量的初始化器启动了一个线程,那么可能不会。
我建议你完全避免全局变量,无论你是否试图将它们伪装成单例。很难在C++中安全正确地实现该反模式。(我会说不可能,因为我不知道有什么方法可以做到这一点,但根据评论,有人比我更了解。
相关文章:
- 如何在C++类内存结构中创建"spacer"?
- 使用Boost Interprocess创建托管共享内存需要很长时间
- 在共享缓冲区内存中创建 ::std::string 对象
- 当注入程序的内存空间时,如何读取从 0 到 0xFFFFFFFFF 的每个字节?我正在创建模式扫描仪
- 如果不分配内存,我如何能够为变量创建和分配值?
- 此函数是否会在C++中创建内存泄漏?
- 如何在不使用 "new" 关键字的情况下解除分配创建的对象的内存?
- 在 C/C++ 中,是否可以通过使用指针更改"important"内存地址的值来创建简单的恶意软件?
- 如何以编程方式区分在内存的堆和堆栈部分创建的对象
- 是否可以在专用内存空间中分配一个为提升管理共享内存而创建的对象
- 为多维数组创建内存空间
- 如何为指向数组的指针创建内存集?
- 何时将为指向动态创建的内存的静态指针创建内存
- 绘制和创建内存缓冲区 (Windows GDI)
- 核心基础为每次调用 CFSTR() 创建内存泄漏
- 创建内存设备背景信息…对于位图,而不是设备(不是显示)
- 如何使用基于现有文件数据库的模式创建内存中数据库
- 是否可能通过使用std::exception_ptr来创建内存泄漏?
- 创建内存文件
- 在c++中创建内存中的大流