[问题] 为什么static 的变量不会被初始化

楼主: liu2007 (è–¯)   2025-03-25 22:11:17
想问个小问题
在某一个版本之后
关于singleton的写法推荐如下
QByteArray& AlbumItem::placeholderBytes(){
static QByteArray bytes;
if (bytes.isNull()){
//....................
}
}
return bytes;
}
后来我想改用指标
QByteArray* AlbumItem::placeholderBytes(){
static QByteArray *bytes = nullptr;
if (bytes == nullptr){
//........................
}
}
return bytes;
}
本来我担心已经存在内存里的*bytes会被初始化为nullptr
造成非singleton的情况
并且导致有内存泄漏
还好测试一下并没有这样的情况发生
想请问是否是因为他检查如果该static 变量已存在于内存
就会跳过宣告这行程式码吗?
还是说实际上有其他动作,只是刚好结果符合我想要的呢?
作者: nh60211as   2025-03-25 22:21:00
static variable 只会在第一次跑到的时候执行一次https://en.cppreference.com/w/cpp/language/storage_duration#Static_block_variables楼下支援C++标准文件
作者: Lipraxde (Lipraxde)   2025-03-26 08:52:00
https://nrt32.medium.com/implementing-a-singleton-in-c-8e20e6c3c96d发现中文的了,该讲的差不多都有讲到XDhttps://www.cnblogs.com/liyuan989/p/4264889.html
作者: bbbing (无)   2025-03-26 10:07:00
function本地的static要能保留沿用,要每次初始化那static就没意义了吧,反之我以为就是用static的目的
作者: descent (“雄辩是银,沉默是金”)   2025-03-26 16:01:00
c++ runtime 有一部份在处理 local static object让 static object 只初始化一次大概是要让 object 的行为和 c static 变量有一样的行为
作者: Dracarys (MayShowGunMore)   2025-03-26 19:00:00
会sync但可以用-fno-threadsafe-statics关掉,然后Itanium C++ ABI有规定api让compiler生code来呼叫runtime来达成这件事
作者: wulouise (在线上!=在电脑前)   2025-03-27 00:49:00
不能理解你的问题,初始化完他就是nullptr, 然后qt有smart pointer所以本来就不会leak吧问题是你改成static ptr谁要负责帮你new?没有data race?你的if 里面要做什么,这个function要做什么描述一下

Links booklink

Contact Us: admin [ a t ] ucptt.com