对,矢量按预期复制.有一个很好的软件geordi可以显示:
{
using namespace tracked;
typedef vector<B> poly_t;
poly_t poly(3); // contains 3 B's
vector<poly_t> v;
v.push_back(poly);
}
Run Code Online (Sandbox Code Playgroud)
它跟踪创建/复制tracked::B.这是输出:
B0* B1*(B0) B2*(B0) B3*(B0) B0~ B4*(B1) B5*(B2) B6*(B3) B4~ B5~ B6~ B1~ B2~ B3~
Run Code Online (Sandbox Code Playgroud)
当我们只跟踪时输出v.push_back:
B4*(B1) B5*(B2) B6*(B3)
Run Code Online (Sandbox Code Playgroud)
如您所见,首先将B0创建为向量构造函数的默认参数.然后将该对象复制到3个B中,然后在构造函数返回时再次销毁B0.poly然后被创建.然后,我们将它推回到多边形向量中.参数poly被复制到一个新的向量中,该向量在多边形向量中创建并由其管理.
如果崩溃,问题可能在于程序的另一部分.检查复制构造函数/构造函数和析构函数是否正常工作,如果使用动态内存分配,则不会删除两次.