아니요 ... 출력 객체에 대한 참조를 가져 오려면 RELATION
유형의 참조 포인터를 RELATION
유형의 참조 객체가 아닌 함수에 전달하십시오.예를 들어
: 당신은 ptr_to_object
역 참조 지금이 시점에서 그래서
RELATION* ptr_to_object = NULL;
string argument_name;
//...more code to initialize argument_name
if (getrelation(argument_name, ptr_to_object) == 1)
{
//...handle error condition
}
//now ptr_to_object points to your a_attribute[index] object
을 할 수 있으며, a_attribute[index]
에서 개체를 얻을 것이다 :
int getrelation(string name, RELATION*& output)
{
bool found=0;
int index=0;
for(int i=0;i<a_attributes.size();i++){
if(name==a_attributes[i].str_name){
found=1;
index=i;
}
}
if(!found){
printf("relation not found");
return 1;
}
output = &(a_attributes[index]); //take the address-of object
return 0;
}
당신은 다음과 같이 함수를 호출 할 것이다. 그런 다음 포인터의 역 참조를 통해 해당 객체의 속성을 변경할 수 있습니다. 유일한 경고는 ptr_to_object
에 delete
을 호출하면 안됩니다. 포인터가 가리키는 개체를 "소유"하지 않고 반환되는 포인터가 new
으로 할당 된 메모리 세그먼트의 시작을 가리 키지 않기 때문입니다. 또한 컨테이너 a_attribute
이 객체를 처분하는 경우 (즉, std::map
또는 std::vector
인 경우) 포인터는 잘못된 메모리 위치를 가리키고 있습니다. 따라서 컨테이너가 객체에 대한 참조로 사용중인 포인터의 수명을 초과하는지 확인해야합니다.
질문에 답하기 전에 "답변 게시"버튼을 눌렀습니다. [faq]를 읽으면 무엇이 좋은 질문인지 알 수 있습니다. –
여기에는 의문의 여지가 없습니다. 질문은 물음표 (?)로 끝납니다. – abelenky
유일한 것은 여기 C++입니다. – pmr