2011-12-21 2 views
-2
map<char *, int> sym_addr; 
map<char *, int> sym_tbl; 
void set_map(map<char *, int> & sym_tbl) 
{ 
sym_addr = sym_tbl; 
} 

위 할당에 문제가 있습니까?지도가있는 할당 연산자

+3

문제점 :'sym_addr '의 키가 누출 될 수 있습니다. 하지만 아마도 당신이 요구하는 것이 아닙니다. – kennytm

+2

달성하고자하는 것은 무엇입니까? –

+3

"모든 문제"를보다 구체적으로 정의하십시오. – thiton

답변

0

더 좋은 방법은 std::string에 키를 변경하는 것입니다 : 복사 할 경우 std::map< std::string, int>

는 const를 참조하여 해당 개체를 전달할 : 그

typedef std::map< std::string, int> myMapType; 
myMapType sym_addr; 
myMapType sym_tbl; 
void set_map(const myMapType & sym_tbl) 
{ 
sym_addr = sym_tbl; 
} 

기타, 아무런 문제가 없습니다. map :: operator =는 한 맵의 내용을 다른 맵으로 복사하는 데 사용됩니다.

+1

으로 바꾸는 것이 더 나을 것 같지 않은데 코드를 간단하게하기 위해'typedef std :: map symtable; . –

0

const 참조로 인수를 전달해야합니다. 그렇지 않으면 const으로 선언 된지도를 복사하지 못하게됩니다.

또한 char*을 키로 사용하면 정확히 이해할 수 있습니다. 키는 주소 인이며 내용은 포함하지 않습니다. 문자열을 으로 색인화하려면 std::string을 키로 사용하십시오.