我一直在尝试这种奇怪的std::vector
行为,这是我无法理解的。
粗略地说,代码看起来像
#include <iostream>
#include <vector>
class MyClass{
public:
MyClass():
v_(),
w_(init_w())
{};
~MyClass()
{};
std::vector<int*> init_w()
{
v_.resize(4096);
return v_;
};
private:
std::vector<int*> w_;
std::vector<int*> v_;
};
int main()
{
MyClass a;
}
在resize
处运行此操作会给我带来错误的段错误。如果为resize
选择了较低的值,则代码可能根本不会出现段错误。
更新
问题是,与初始化列表指示的内容相反,w_
在v_
之前初始化。因此,在init_w()
中,v_
状态未定义。
在声明中恢复v_
和w_
的顺序可以解决问题。
答案 0 :(得分:2)
问题在于,与初始化列表指示的内容相反,w_在v _
之前初始化
你推断是这样的,但事实上并非如此。清单的顺序无关紧要;类中的声明顺序是。因此,如果您想了解成员实际的初始化方式,您的初始化列表应该模仿声明顺序。
我的问题是;为什么你使用指针向量开始?在对象超出范围或遭受内存泄漏之前,您是否意识到需要delete
列表中的每个元素?