문자열이 있는데 그 문자열에 대한 참조를지도에 넣고 싶습니다.지도에 저장된 할당 중 문자열 메모리 관리
string m_tmp;
map<pair<string, string>, string&> m;
m[pair<string, string>("Foo","Bar")]= m_tmp;
then, I change the m_tmp;
m_tmp="DFDFD";
맵은 모든 플랫폼에서 여전히 새로운 값으로 m_tmp
을 참조합니까?
아래의 더미 프로그램에 따르면 s
의 주소는 변경되지 않습니다 (Linux AS4, gcc 3.4). 이와 관련하여 메모리 관리가 플랫폼간에 동일합니까? S의 주소 (변수가 C++로 그렇게 할 수 없습니다), 문자열의 내용이 변경 될 수 변경되지 않지만 연주 할 때
#include<string>
#include<iostream>
using namespace std;
int main()
{
string s="Sasha";
cout<<&s<<endl;
s="Bar";
cout<<&s<<endl;
s="Foo";
cout<<&s<<endl;
}
이 이미 –
으로 변경되었습니다.이 작업은 btw가됩니다. map, string> m; [쌍 ("Foo", "Bar") "문자열"]; ?? 방금 알게 된 이유는 다음과 같습니다. 왜 shared_ptr입니까? 과장된 것 같아요 –
shared_ptr는 개체 복사본 수를 1로 줄입니다. 유스 케이스에 따라 다르지만 필요하지 않을 수도 있습니다.포인터는 단지 움직일 때 더 빠릅니다. 문자열 객체 (기본 체인의 사본 포함)가 아닙니다. 문자열이 짧으면 아마도 과잉 공격 일 것입니다. –