常量字符串如何在C ++中工作

时间:2018-04-23 12:09:09

标签: c++ string class memory constructor

我有这样一段代码:

{{1}}

我原本期望有2个单独的类temp实例和不同的名字(Jack和Katy)。所有构造函数和析构函数都正常工作。 但是,我得到了如此奇怪的输出:

  

CreatedJack

     

处理完成,退出代码为11

我很确定问题是构造函数temp(char * temp_name)中的常量字符串,但无法弄清楚是什么。

所以我的问题是你可以解释一下,在内存方面,常量字符串是如何工作的以及为什么在这种情况下我不能创建2个类temp实例?

1 个答案:

答案 0 :(得分:5)

您需要分配足够大小的缓冲区来包含传递的字符串数据,并使用指向此缓冲区的指针初始化name。现在,您正在取消引用未初始化的指针name获取未定义的行为。

此代码甚至无法编译,因为您试图将字符串文字传递给构造函数,期望指向非const限定char的指针。很可能你使用的Visual Studio在很长一段时间内都允许这种不符合标准的行为。从VS2017开始,您应该使用/permissive-进行编译以强制执行一致性。并将构造函数签名更改为

temp(char const * const temp_name)