在构造函数中声明一个数组:它是否会导致悬空指针?

时间:2015-09-11 16:11:03

标签: c++ pointers

这可能是一个简单的问题。考虑:

class foo
{
  int * p;

  public:
    foo(int i)
    { int t[i]; p = t; }

 };

一旦构造函数超出范围,p是悬空指针吗?我使用new []吗?

蒂亚

1 个答案:

答案 0 :(得分:3)

  

一旦构造函数超出范围,p是否为悬空指针?

是的,当您离开构造函数时,t的生命周期结束。此外,像t[i]这样的可变长度数组是gcc / clang扩展,而不是标准C ++的一部分。

  

我必须使用new[]吗?

没有!你应该使用更容易和更好的std::vector代替!

class foo {
  std::vector<int> p;

  public:
    foo(int i) : p(i) {}        
};

您可以使用p[k]访问其元素,就像使用C风格的数组一样,但不必担心令人讨厌的内存管理。

有关std::vector可以执行的操作的完整文档,请参阅here