В этом фрагменте кода у меня есть 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 Visual Studio и в конце программы я вижу значение vs2.mymap[7]
остается 54.321
, как и ожидалось. Но мне нравится знать, правильно ли это с помощью стандартов C++ или мне нужно написать оператор присваивания vectstruct
, в котором я бы явно вызывал оператор присваивания карты?
В общем случае не записывайте конструкторы копирования или операторы присваивания, если все члены данных ведут себя хорошо (как в этом случае). Вам нужно только это, когда вы управляете членом (например: указатель) (см. Правило none, правило три, правило пять (C++ 11)) –