0

例如,我有一个构造函数

myClass(const char* name);

能不能像

myClass(const char* name);
{
  someInnerField = name;
}

或者我应该按值将输入字符串复制到内部字段?

4

4 回答 4

4

安全的是:

std::string someInnerField;
myClass(const std::string& name) : someInnerField(name)
{
}

如果类破坏了它的成员指向的内存(并且您仍然在类的范围之外使用它)或者如果内存在类之外被破坏(并且您继续在内部使用它),您的版本可能会失败。

于 2012-10-12T07:46:55.170 回答
1

这取决于您对课程所做的工作,以及在输入时有效的字符串类型。通常(实际上几乎总是),类应该std::string用作成员,在这种情况下,它是完全安全的。否则,在极少数情况下,将参数限制为字符串文字(或其他具有静态生命周期的已知数据源)是有意义的,在这种情况下,您只需保存指针即可。(但这是非常非常脆弱的。我会避免它,并且仍然使用std::string。)

于 2012-10-12T08:00:02.293 回答
0

只要您确定参数不会是指向可能被其他人删除的内存区域的指针,它就是安全的。但是要确保每次处理指针时都可以在使用前检查其有效性,否则可能会出现内存异常。

于 2012-10-12T07:56:12.420 回答
0

这没用。请使用std::string,或者如果“char*”可以使用“strcpy”或“memcpy”的功能。</p>

于 2012-10-12T09:45:22.947 回答