相关疑难解决方法(0)

字符串文字:它们去哪儿了?

我对字符串文字的分配/存储感兴趣.

我确实在这里找到了一个有趣的答案,说:

定义内联字符串实际上是将数据嵌入程序本身并且无法更改(某些编译器通过智能技巧允许这样做,不要打扰).

但是,它与C++有关,更不用说它不打扰了.

我很烦.= d

所以我的问题是我的字符串文字保存在哪里以及如何保存?我为什么不试着改变呢?实施是否因平台而异?有没有人愿意详细说明"聪明的伎俩"?

c memory string-literals

155
推荐指数
6
解决办法
7万
查看次数

如何安全地清除std :: string?

如何存储敏感数据(例如:密码)std::string

我有一个应用程序,提示用户输入密码,并在连接设置期间将其传递给下游服务器.我想在建立连接后安全地清除密码值.

如果我将密码存储为char *数组,我可以使用SecureZeroMemory等 API 来清除进程内存中的敏感数据.但是,我想在代码中避免使用char数组,并且正在寻找类似的东西std::string

c++ string passwords secure-coding

17
推荐指数
3
解决办法
7852
查看次数

动态创建std :: string时有两个'新'调用

我正在尝试创建一个简单的内存管理器来熟悉这个概念,我已经为全局new和delete提供了覆盖,并且刚开始搞乱构造一些对象,当我注意到单个动态字符串分配时,我似乎打了两次新的.第一次new被命中,它甚至在字符串构造函数被调用之前,奇怪的是,这是两个分配中较大的一个,第二次被命中时,调用来自std :: string(basic_string)构造函数.

我想知道两个新的是什么.具体来说,我在这种情况下关心它,因为每个新的都创建了自己的分配标题,如果我使用一个简单的内存管理器,我会对我将要介绍的开销产生学术上的好奇心.

相关代码:

class DumbDataType
{
    std::string m_name;
};

int main()
{
    printf("STARTING MEMORY MANAGEMENT TESTING \n");

    printf("******************* Creating DATA ******************* \n");
    std::string* data = new std::string();
    delete data;

    printf("******************* Creating LORE ******************* \n");
    DumbDataType * lore = new DumbDataType();
    delete lore;

    getchar();
}
Run Code Online (Sandbox Code Playgroud)

运行时输出

STARTING MEMORY MANAGEMENT TESTING 
******************* Creating DATA ******************* 
[New] 28 
[New] 8 
[Delete] 00D88C18 
[Delete] 00D88BC8 
******************* Creating LORE *******************
[New] 28 
[New] 8 
[Delete] 00D88C18 
[Delete] 00D88BC8 
Run Code Online (Sandbox Code Playgroud)

运营商新增和删除

void * operator new(std::size_t …
Run Code Online (Sandbox Code Playgroud)

c++ memory memory-management

3
推荐指数
1
解决办法
131
查看次数