[英]Do I need to allocate memory for a char pointer to a constructor?
我有一个Arduino代码的构造函数,如下所示:
class X {
private:
char* _name;
public:
X(char*);
}
X::X(char* name) {
_name = name;
}
我的问题是:我是否需要分配一个char缓冲区而不是仅仅依赖于传递的字符串指针? 我不是在字符串上操作(除了缩短它)。 我似乎还没有遇到任何问题,但我想验证。
这是针对arduino的,但对C和C ++的响应也会受到欢迎。
您不需要分配缓冲区,但它可能更强大。 特别是因为你是在一个嵌入式系统上,比如没有调试器,所以如果有人从调用者的堆栈中传递了一个字符串,你就会被清除。 试图找出那种问题所在,就像大海捞针一样。 简而言之,如果有人向您传递了一些数据,那么很难保证内存会持续存在,因此您最好自己处理这些分配。
这取决于。
基本上,根据代码的方式,您要求名称的生命周期大于类实例的生命周期。 如果name始终是字符串文字,即X(“foo”),那么这是可以接受的。 否则,调用者必须分配字符串,这是一个奇怪且容易出错的合同要求。
我建议总是在构造函数中复制字符串,除非很明显它始终是字符串文字。
在这种情况下,您可能遇到问题。
X foo() {
char ar[10];
strcpy(ar,"Hello");
X obj(ar);
return obj;
} // ar is deallocated here.
但是返回的对象的成员变量_name
仍然指向堆栈中较早的ar
。 因此,最好分配内存,然后在不再需要时释放它。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.