在构造函数中声明数组是否会导致悬空指针

Declaring an array in a constructor: does it result in a dangling pointer?

本文关键字:空指针 是否 构造函数 声明 数组      更新时间:2023-10-16

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

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

一旦构造函数超出作用域,p是悬空指针吗?我用new[]来做吗?

Tia

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的完整文档