例如,我有一个像
这样的构造函数myClass(const char* name);
可以像
myClass(const char* name);
{
someInnerField = name;
}
或者我应该按值将输入字符串复制到内部字段?
答案 0 :(得分:4)
安全的是:
std::string someInnerField;
myClass(const std::string& name) : someInnerField(name)
{
}
如果类破坏了其成员指向的内存(并且您仍然在类的范围之外使用它),或者如果内存在类外部被销毁(并且您继续在内部使用它),那么您的版本可能会失败。 / p>
答案 1 :(得分:1)
这取决于你在课堂上做什么,以及字符串的类型
这对输入有效。一般(几乎总是,实际上),班级
应该使用std::string
作为成员,在这种情况下,它是完美的
安全。否则,只有很少的情况才有意义
将参数限制为字符串文字(或其他一些已知的来源)
具有静态生命周期的数据),在这种情况下,你可以侥幸逃脱
保存指针。 (但这非常非常脆弱。我会避免它,而且
仍然使用std::string
。)
答案 2 :(得分:0)
只要您确定参数不是指向可能被其他人删除的内存区域的指针,那么它是安全的。 但是要确保每次处理指针时都可以在使用前检查其有效性,否则会冒内存异常的风险。
答案 3 :(得分:0)
它不起作用。请使用std :: string,或者如果是“char *”,你可以使用“strcpy”或“memcpy”的功能。