使用指针初始化c ++类是否安全?

时间:2012-10-12 07:45:20

标签: c++ pointers constructor

例如,我有一个像

这样的构造函数
myClass(const char* name);

可以像

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

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

4 个答案:

答案 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”的功能。