我的 Arduino 代码有一个构造函数,如下所示:
class X {
private:
char* _name;
public:
X(char*);
}
X::X(char* name) {
_name = name;
}
我的问题是:我是否需要分配一个字符缓冲区而不是仅仅依赖于传递的字符串指针?我没有对字符串进行操作(除了缩短它)。我似乎还没有遇到任何问题,但我想验证一下。
这是特定于 arduino 的,但也欢迎对 C 和 C++ 的响应。
最佳答案
视情况而定。
基本上,按照现在的代码方式,您需要该名称的生命周期大于类实例的生命周期。如果名称始终是字符串文字,即 X("foo"),那么这是可以接受的。否则,调用者将不得不分配字符串,这是一个奇怪且容易出错的契约(Contract)要求。
我建议总是在构造函数中复制字符串,除非很明显它总是应该是字符串文字。
关于c++ - 我是否需要为指向构造函数的 char 指针分配内存?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9406601/