比如,我有一段代码如下:
这段代码,表面生没有什么问题。
当vct.push_back(cvi);时,当vct内部空间不足的时候,将会重新申请一段空间,这个对象就被移走了!
但是,注意,这个对象本来应该移走,但我们现在所在这个对象的内部的这个对象并么有移走,反而会变成垃圾,也就是在vct申请空间时,旧空间被析构,但逻辑上我们的对象仍然是垃圾对象,所以便悲剧了。
所以,以后再使用vct时一定要小心,小心被析构。
解决办法有两种:
(1)给定vector一定的空间,让其有足够的空间。
(2)这种设计模式本身就是有问题的,我们可以调整结构,比如在别处写一个函数do_it(int pos,vector<...> vct);