假设我有以下代码
class simple_class
{
public:
simple_class() { }
void start()
{
boost::thread simple_thread(&simple_class::expand,this);
}
void expand()
{
while(1)
{
this->private_vector.push_back((int)1);
}
}
private:
std::vector<int> private_vector;
};
int main()
{
simple_class* obj1 = new simple_class();
simple_class* obj2 = new simple_class();
obj1->start();
obj2->start();
while(1) {}
}
显然,这个程序会在某个时候耗尽内存并且应该抛出一个std::bad_alloc
. 但我的问题如下:
- 在此之前是否存在 obj1 的 private_vector 会被 obj2 的 private_vector 覆盖的情况?有没有办法保护它?
- 如果我在定义 EIGEN_MAKE_ALIGNED_NEW_OPERATOR 时强制类中的 private_vector 在内存中对齐(就像 Eigen 对其矩阵所做的那样),这是否会改变问题 1 的内容?