zer*_*s00 3 c++ stack boost overflow
到底发生了什么?
#include <boost/array.hpp>
#include <boost/assign/list_of.hpp>
struct Toy {
int m_data[100000];
};
struct Box {
Box()
: m_toys( boost::assign::list_of( Toy() )( Toy() )( Toy() ) )
{}
boost::array<Toy,3> m_toys;
};
void main()
{
Box* box = new Box; // This causes stack overflow
}
Run Code Online (Sandbox Code Playgroud)
问题是Toy()传递给的对象boost::assign::list_of().这些是在复制到Box对象(将在堆上)之前在堆栈上创建的临时对象
为避免在堆栈上创建它们,您可以这样做:
Box() : m_toys()
{
Toy* t = new Toy;
for (int i = 0; i < 3; ++i)
m_toys.push_back(*t);
delete t;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
174 次 |
| 最近记录: |