2011-03-18 5 views
2

내가벡터 포인터와 push_back()

void f(vector<object> *vo) { 

} 

이 그리고 내가

vector<object> vo; 
f(&vo); 

이 어떻게와 push_back을 사용() 벡터에 추가하는 f를하는 벡터의 주소를 전달하는 경우? 포인터 역 참조

답변

8

(I 포인터에 새로운 해요) :이 언어의 기본 개념이다

(*vo).push_back(object()); 
vo->push_back(object()); // short-hand 

주, 당신은 good book을 읽는 혜택을 누릴 수 있습니다.

f(0); // oops, dereferenced null; undefined behavior (crash) 

가 올바르게 모든 유효한 포인터 값을 (예, 널 (null)이 유효한 값) 처리 할 필요가, 함수가 안전하게하려면 :


참고이 눈부신 단점이있다.

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 
} 

이제 무거운 짐이 유효한 참조를 제공하기 위해 함수의 호출에 : 참조를 사용하여

if (!vo) return; 
// or: 
if (!vo) throw std::invalid_argument("cannot be null, plz"); 

또는 함수는 본질적으로 올바른합니다 어느 어떤 종류의 검사를 추가 .

+2

+1은 4 초 빠릅니다. –

+0

나는 개인적으로 먼저 참고 문헌을 제안 할 것이지만, 둘 다 보여주기 위해서는 +1을 제안 할 것이다. – Puppy