【问题标题】:What's the difference between new char[10] and new char(10)new char[10] 和 new char(10) 有什么区别
【发布时间】:2011-04-23 13:17:44
【问题描述】:

在C++中,有什么区别

char *a = new char[10];

char *a = new char(10);

谢谢!

【问题讨论】:

标签: c++


【解决方案1】:

第一个分配 10 个字符的数组。第二个分配一个初始化为 10 的字符。

或者:

第一个应替换为std::vector<char>,第二个应放入智能指针中。

【讨论】:

  • @Green:嗯,this 是一个好的开始。
  • +1 来自我。当我看到有人匿名反对一个完全正确的答案时,我总是把它归结为“一无所知”。
【解决方案2】:
new char[10];

动态分配一个 char[10](char 数组,长度为 10),具有不确定的值,而

new char(10);

再次,动态分配单个字符,整数值为 10。

【讨论】:

    【解决方案3】:
    char *a = new char[10];
    ...
    delete [] a;
    

    上面动态分配和释放10个连续的内存槽,可以用来存储chars。

    char *a = new char(10);
    ...
    delete a;
    

    上面动态分配和释放一个内存槽,初始化为整数值10,相当于char值'\n'


    如果您不了解指针,请勿使用std::vector<T>。了解内存分配和指针的工作原理将使您成为更好的程序员

    【讨论】:

    • 这对现有答案有什么好处?您的后半部分纯粹是意见,实际上在现代 C++ 社区中非常不愉快。最好将黑匣子交给人们,然后向他们展示它的工作原理以及我们使用它们的原因。无论如何,手动内存管理是糟糕的 C++,为什么要从教人们糟糕的 C++ 开始呢?
    • 10个内存槽是连续的,评论std::vector, (char)10 == '\n' ~~不要因为我伤害了你的感情就给我投反对票。
    • 你在下半场编辑,我编辑了我的评论以匹配。此外,所有三个现有答案都说它是一个“数组”。数组总是连续的。另外,'\n' 不一定是 10,这取决于您的字符集。
    • 你对如何教人的看法也是一种看法。我们让他决定。此外,提及删除也很重要。
    • 它添加的一件事是明确提及删除,尤其是。 delete[] a 陷阱
    【解决方案4】:

    我宁愿使用:

    size_t size = 10; //or any other size
    std::string buff(size, 0); //or: std::string buff(size, '\0');
    

    现在如果你必须使用 char* buff,那么你可以使用:

    &buff[0]
    

    当你需要使用 const char* 时,你可以使用:

    buff.c_str()
    

    最大的好处是您不需要释放内存,stl 会为您处理这些。 下一个优点是您可以使用所有的 stl 字符串函数

    【讨论】:

      【解决方案5】:

      好吧,第一个将创建一个数组。 但我想你的问题主要是在第二个问题上。 您的代码可以将其用作有效字符,请考虑:

      char * x ;
      cin >> *(x=new char()) ;
      

      将动态生成一个字符,然后从标准输入中读取它。

      【讨论】:

      • 仅仅因为一个对象的大小为 1 并不意味着它是一个字符。另外,你怎么可能删除那个变量? (也不要在不需要时动态分配。)“不要忘记删除”-> 糟糕的 C++ 代码。
      • 你说得对,但我只是想告诉我们的朋友,制作 C++ 的人是出于某种目的而制作这个的。我不应该将它与 cin 一起使用,并且没有对它的引用。
      【解决方案6】:

      [10] 定义了一个数组,其中 as (10) 为新创建的(单个)字符赋值。

      如果你想在 C 中声明一个大小为 10 的数组并且错误地定义了 char a(10), 编译器会抛出语法错误,因此您可以修复它。 但是在 C++ 中,它会编译得很好,并且您的程序可能会在访问 a[1] 或 deleting a.

      时崩溃

      所以在 C++ 中,使用 vector 总是比使用动态分配的数组更好。 我希望你明白了。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-05-14
        • 1970-01-01
        • 2020-07-29
        • 1970-01-01
        • 2014-07-14
        • 2018-08-02
        • 1970-01-01
        • 2011-11-22
        相关资源
        最近更新 更多