C++:在类构造函数中初始化chars数组和int

标签 c++

我正在寻找指南,甚至找到了 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 算法轻松制作拷贝,或者,如果出于任意原因也限制了该算法,您可以使用旧的 memcpystrcpy 函数。

这不是很简单,但如果你这样做,你将拥有一个非常方便的类,它会自动为你管理内存,让你可以专注于其他问题。

关于C++:在类构造函数中初始化chars数组和int,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9101923/

相关文章:

c++ - 如何围绕一组二维点拟合边界椭圆

c++ - 在 C++ 中发送到文件

c++ - 类成员访问 : section 3. 4.5,第 2 点:来自 N3290 draft C++ 的点

c++ - HitTest 未按预期工作

c++ - g++ 无法将 .o 文件链接到可执行文件

c++ - 如何更改 C++'11 中指针的所有权?

c++ - 为什么在函数中使用多个 getlines 来输入字符串会出现意外行为?

c++ - string_view格式化流输出的实现

c++ - 调用struct的虚函数时出现段错误

c++ - 如何找到有多少指针指向链表中的特定节点?