我有这样一段代码:
{{1}}
我原本期望有2个单独的类temp实例和不同的名字(Jack和Katy)。所有构造函数和析构函数都正常工作。 但是,我得到了如此奇怪的输出:
CreatedJack
处理完成,退出代码为11
我很确定问题是构造函数temp(char * temp_name)中的常量字符串,但无法弄清楚是什么。
所以我的问题是你可以解释一下,在内存方面,常量字符串是如何工作的以及为什么在这种情况下我不能创建2个类temp实例?
答案 0 :(得分:5)
您需要分配足够大小的缓冲区来包含传递的字符串数据,并使用指向此缓冲区的指针初始化name
。现在,您正在取消引用未初始化的指针name
获取未定义的行为。
此代码甚至无法编译,因为您试图将字符串文字传递给构造函数,期望指向非const限定char
的指针。很可能你使用的Visual Studio在很长一段时间内都允许这种不符合标准的行为。从VS2017开始,您应该使用/permissive-
进行编译以强制执行一致性。并将构造函数签名更改为
temp(char const * const temp_name)