这可能是一个简单的问题。考虑:
class foo
{
int * p;
public:
foo(int i)
{ int t[i]; p = t; }
};
一旦构造函数超出范围,p是悬空指针吗?我有使用new []吗?
蒂亚
答案 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。