use*_*241 0 c++ memory-management
std::string str = "string":
const char* cstr = str.c_str();
str.clear();
//here, check if cstr points to a string literal.
Run Code Online (Sandbox Code Playgroud)
cstr在调试或发布模式下运行程序时,如何检查是否仍指向字符串?
有没有办法在C++中使用异常处理来确定这个?
没有可移植的方法来做到这一点.在调用之后,实现完全可以自由地保持缓冲区,未经修改clear().如果,OTOH,clear()释放字符串的缓冲区,cstr现在指向未分配的内存,但即便如此,它还取决于内存分配器如何处理它.调试分配器将使用一些幻数(如0xDEADBEEF)填充块,并且生产分配器可能保持不变,或者将整个页面返回给操作系统.
无论你削减它的哪种方式,使用c_str()字符串变异后返回的指针都是未定义的行为.故事结局.
| 归档时间: |
|
| 查看次数: |
169 次 |
| 最近记录: |