运营商' new'分配内存来存储指针

时间:2014-06-23 11:48:05

标签: c++

这是一个非常愚蠢的问题,但我真的没有在其他任何地方找到答案。 我只是想分配内存来存储指针。这应该是最容易的。 但令人讨厌的是它不起作用(在Windows上的VS2010中)......

int _tmain(int argc, _TCHAR* argv[])
{
    int* ints;
    int** intptrs;

    // Want to allocate space for single pointer
    ints = new int[10]; // Works

    // Want to allocate space for a integer pointer
    intptrs = new (int*); // Works 

    // Want to allocate space for 10 integer pointers
    intptrs = new (int*)[10]; // error C2143: syntax error : missing ';' before '['
}

2 个答案:

答案 0 :(得分:4)

gcc的编译错误:

$ g++ test.cc
test.cc: In function 'int main()':
test.cc:3:23: error: array bound forbidden after parenthesized type-id
test.cc:3:23: note: try removing the parentheses around the type-id

因此,您只需要删除括号以删除错误:

intptrs = new int*[10];

在使用C ++时,我建议使用std::vector而不是原始数组:

#include <vector>
int main() {
  // create 10 pointers to int
  std::vector<int*> intptrs(10);
}

(注意,当向量被销毁时,指向的对象不会被删除。你需要在需要时手动执行此操作。或者使用智能指针而不是原始指针,例如std::shared_ptr。)

供参考:

答案 1 :(得分:0)

intptrrs是指向指针的指针。所以这应该有用

*intptrs = new int[10];