【发布时间】:2018-04-23 12:09:08
【问题描述】:
我有这么一段代码:
class temp {
private :
char * name;
public :
temp(char * temp_name){
strcpy(name,temp_name);
cout << "Created"<<name<<endl;
}
~temp(){
cout<< "Destoyed"<<name<<endl;
}
};
int main() {
class temp person1("Jack");
class temp haha("Katy");
return 0;
}
我希望有 2 个独立的类 temp 实例,它们的名称不同(Jack 和 Katy)。所有构造函数和析构函数都可以正常工作。 但是,我得到了这样一个奇怪的输出:
创建杰克
进程以退出代码 11 结束
我很确定问题出在构造函数 temp(char * temp_name) 中的常量字符串,但不知道是什么。
所以我的问题是你能解释一下,就内存而言,这个常量字符串是如何工作的,为什么在这种情况下我不能创建 2 个类 temp 实例?
【问题讨论】:
-
您的示例中没有常量字符串。这是一个常量字符串:
const std::string s = "Hello World!";. -
这一行:
strcpy(name,temp_name);尝试将 c 字符串复制到不存在的缓冲区。这是未定义的行为。复制前需要为name分配空间。 -
请同时升级您的编译器和标志。这个does not and should not compile as-is.
-
你在哪里倾向于语法“class temp haha”——因为那是非常 C
标签: c++ string class memory constructor