【发布时间】:2013-08-02 15:25:45
【问题描述】:
这不是关于为什么要编写这样的代码的问题,而是关于方法如何相对于它所绑定的对象执行的问题。
如果我有这样的结构:
struct F
{
// some member variables
void doSomething(std::vector<F>& vec)
{
// do some stuff
vec.push_back(F());
// do some more stuff
}
}
我是这样使用它的:
std::vector<F>(10) vec;
vec[0].doSomething(vec);
如果doSomething(...) 中的push_back(...) 导致向量扩展会怎样?这意味着vec[0] 将在执行其方法的过程中被复制然后删除。这可不好。
有人能解释一下这里到底发生了什么吗?
- 程序会立即崩溃吗?该方法是否只是尝试对不存在的数据进行操作?
- 在遇到诸如更改对象状态之类的问题之前,该方法是否对其对象进行“孤立”操作?
我对方法调用与关联对象的关系感兴趣。
【问题讨论】:
标签: c++ memory-management stl