아래 코드에서이 구조체에 std::map
이 있습니다. 그리고 저는 이제 구조의 인스턴스를 다른 인스턴스에 할당하고 있습니다. 구조체에는 대입 연산자가 없습니다. 이 경우 맵의 할당 연산자가 호출되거나 컴파일러가 구조의 얕은 복사본 메모리를 포함 할 것으로 예상됩니까? std :: map 멤버가있는 구조 할당
int _tmain(int argc, _TCHAR* argv[])
{
struct vectstruct
{
std::map<int, double> mymap;
};
vectstruct vs1, vs2;
vs1.mymap[7] = 54.321;
vs2 = vs1; // Should call assignment operator of map vs2.mymap
vs1.mymap[7] = 65.432;
return 0;
}
나는 Microsft 비주얼 스튜디오와 내가 예상대로
vs2.mymap[7]
의 값이
54.321
남아 참조 프로그램의 마지막에이 시도. 하지만 C++ 표준에 맞는지 아니면 명시 적으로지도의 대입 연산자를 호출 할
vectstruct
의 대입 연산자를 작성해야하는지 알고 싶습니다.
일반적으로 모든 데이터 멤버가 제대로 작동하면 복사 생성자 또는 할당 연산자를 쓰지 마십시오 (이 경우). 멤버 (예 : 포인터)를 관리 할 때만 필요합니다 (none 규칙, three 규칙, five 규칙 (C++ 11) 참조). –