例如,我有一个构造函数
myClass(const char* name);
能不能像
myClass(const char* name);
{
someInnerField = name;
}
或者我应该按值将输入字符串复制到内部字段?
例如,我有一个构造函数
myClass(const char* name);
能不能像
myClass(const char* name);
{
someInnerField = name;
}
或者我应该按值将输入字符串复制到内部字段?
安全的是:
std::string someInnerField;
myClass(const std::string& name) : someInnerField(name)
{
}
如果类破坏了它的成员指向的内存(并且您仍然在类的范围之外使用它)或者如果内存在类之外被破坏(并且您继续在内部使用它),您的版本可能会失败。
这取决于您对课程所做的工作,以及在输入时有效的字符串类型。通常(实际上几乎总是),类应该std::string
用作成员,在这种情况下,它是完全安全的。否则,在极少数情况下,将参数限制为字符串文字(或其他具有静态生命周期的已知数据源)是有意义的,在这种情况下,您只需保存指针即可。(但这是非常非常脆弱的。我会避免它,并且仍然使用std::string
。)
只要您确定参数不会是指向可能被其他人删除的内存区域的指针,它就是安全的。但是要确保每次处理指针时都可以在使用前检查其有效性,否则可能会出现内存异常。
这没用。请使用std::string,或者如果“char*”可以使用“strcpy”或“memcpy”的功能。</p>