假设我有以下代码
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 吗?
最佳答案
我通常不是一个会回答问题的人,但我几乎 100% 肯定这个问题的答案是:
“没有。”您正在使用 new 运算符和一个 STL 对象。正如您所指出的,您需要担心的最大问题是内存很快就会耗尽。
又不是。我对特征矩阵一无所知,但内存对齐将由操作系统和编译器决定,而不是由语言决定。
关于c++ - 使用 std::vector 和 boost::thread 进行内存管理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11460295/