在构造函数中声明数组是否会导致悬空指针
Declaring an array in a constructor: does it result in a dangling pointer?
这可能是一个简单的问题。考虑:
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
的完整文档
相关文章:
- 为什么会出现 gettnig 运行时错误:加载类型为"_Bit_type"(stl_bvector.h) 的空指针?
- 新分配指向函数的指针是否合法?
- 在函数结束后使用指向变量的指针是否安全?
- 运行时错误:引用绑定到类型为"int"的空指针
- 这个失败的测试是将零添加到空指针未定义的行为、编译器错误还是其他什么?
- 为什么我在空指针错误(链表)中获取成员访问权限
- 成员访问是否在空指针上定义C++?
- 是否允许向空指针添加零?
- 模板功能以检查智能指针是否为空
- 使用 new 并能够检查指针是否为 0(空)
- 视觉查看数组中的指针是否为空(C )
- C++:另一个"检查指针是否为空"
- 在删除之前清空指针是否会导致内存泄漏
- 对于空指针,删除程序的标准行为在 shared_ptr 和 unique_ptr 之间是否不同
- 指针指向0x1 - 正在检查空值是否有效
- 通过空指针获取成员变量的地址是否会产生未定义的行为
- 可能的空指针解引用-否则检查它是否为空是多余的
- 如何测试自动指针是否为空
- 是否空指针分配分区有一个错误
- 在调用COM Release()函数后,指针是否被设置为空?