我正在寻找指南,甚至找到了 this ,但它没有提供答案。 我的问题是如何在构造函数中初始化 C 数组?下面我假设了一个我想做的事情的例子,但是我不知道它是否可以但有缺陷,完美,或者只是有问题,并且有办法让它变得更好。
class A{
private:
char* a;
int b;
public:
A(char*, int);
}
A::A(char* _a, int _b){
strcpy(a, _a);
b = _b
}
int main(){
A tempA;
char arr[50];
int c = 40;
strcpy(arr,"derp")
tempA = new A(arr,c)
return 0;
}
目前我身边没有 C++ 专家,所以我希望能收到尽可能多的反馈。如果这是一个重复的问题,我也很抱歉,但我真的没有找到任何相关信息。
最佳答案
如果你想存储一个字符串,你可以存储一个std::string
:
class A{
private:
std::string a;
int b;
public:
A(std::string const&, int);
}
A::A(std::string const& _a, int _b) : a(_a), b(_b) {}
如果你的导师坚持要你将指向字符的指针视为字符串,那么你手上的事情就很复杂了,因为你必须自己处理管理字符指向的内存,以免你最终 leaking memory .换句话说,您需要实现类似于 std::string
的东西。
所以,假设您真的需要这样做...
- 无论何时使用
new
,都需要一个匹配的delete
来释放new
分配的内存; - 您可能希望
new
由类的构造函数调用; - 如果使用类的自动存储持续时间对象和适当的析构函数进行清理,您可以自动完成
删除
; - 该类可以设为不可复制(例如,通过制作私有(private)复制构造函数和复制赋值运算符),或者如果您编写 proper copy constructor 则可以设为可复制。和 copy assignment operator ;
- 您可以使用
std::copy
算法轻松制作拷贝,或者,如果出于任意原因也限制了该算法,您可以使用旧的memcpy
或strcpy
函数。
这不是很简单,但如果你这样做,你将拥有一个非常方便的类,它会自动为你管理内存,让你可以专注于其他问题。
关于C++:在类构造函数中初始化chars数组和int,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9101923/