代码之家  ›  专栏  ›  技术社区  ›  AppleGrew

我是否正确使用了新运算符?

  •  2
  • AppleGrew  · 技术社区  · 17 年前

    char **x = NULL;
    

    x将指向指针数组。那么下面的代码正确吗?

    x = new (nothrow) (*char)[20];
    

    我们将使用

    delete[] x;
    

    x = (char **) malloc(sizeof(char **) * 20);
    

    和

    x=新的(无字符)(*char)[20];
    

    相等的

    4 回复  |  直到 17 年前
        1
  •  7
  •   xtofl Adam Rosenfield    17 年前

    除了unwind提到的指针语法之外,它是等效的:在这两种情况下都将分配和删除一个20字符*的数组。

    C++-adept警告:使用 std::vector< std::string >

        2
  •  4
  •   unwind    17 年前

    不,该代码有语法错误。星号消失了 之后 类型名称,以形成指向该类型的指针。所以它是:

    char*
    

    不是:

    *char
    

    奇怪的是,在“C风格”示例中,使用 malloc()

    正如许多评论者善意地指出的那样,这本书还有其他问题 malloc() 以及它对 sizeof malloc() 如果可能的话调用,所以我会这样编写该版本,以分配一个由20个字符指针组成的动态数组:

    char **x;
    
    x = malloc(20 * sizeof *x);
    

    1. 应该理解为“20倍于任何东西的大小” x “点”,即单个尺寸的20倍 char *
    2. 仅在一个位置包含魔法常数20。
    3. 如果要更改为,则不重复该类型的任何部分 wchar_t **x 这仍然有效,而且不是偶然的。
    4. 是用C写的,因为我觉得在讨论时更自然 malloc() . 在C++中,需要转换返回值。在C语言中,您永远不应该这样做。
        3
  •  2
  •   user110714 user110714    17 年前

    在C++中引入了新的。Malloc是C。

    this 文章

        4
  •  1
  •   anon anon    17 年前

    我想问你为什么一开始就分配这样的东西。在C++中,STD::STD::字符串的向量更有可能成为你需要的。