如果我有
void f(vector<object> *vo) {
}
我将向量的地址传递给 f
vector<object> vo;
f(&vo);
我将如何使用push_back()
添加到向量中?
取消引用指针:
(*vo).push_back(object());
vo->push_back(object()); // short-hand
请注意,这是语言的基本概念,您可能会从阅读一本好书中受益。
请注意,这有一个明显的缺点:
f(0); // oops, dereferenced null; undefined behavior (crash)
为了使您的函数安全,您需要正确处理所有有效的指针值(是的,null 是一个有效值)。要么添加某种检查:
if (!vo) return;
// or:
if (!vo) throw std::invalid_argument("cannot be null, plz");
或者通过使用参考使您的功能本质上是正确的:
void f(vector<object>& vo) // *must* reference a valid object, null is no option
{
vo.push_back(object()); // no need to dereference, no pointers; a reference
}
现在,函数的调用者有责任为您提供有效的参考。