次のコードがあるとします
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 のように変更されますか?