Здесь ls держит указатель на символ. Если конструктор копирования не указан, будет ли конструктор копирования по умолчанию выполнять глубокое копирование?
Конструктор копирования по умолчанию будет копировать все элементы - то есть вызывать их соответствующие конструкторы копирования. 1 Так что да, std::vector
(ничего особенного в отношении C ++) будет должным образом скопировано.
Однако память, на которую указывают элементы char*
внутри вектора, конечно же, не будет, поскольку C ++ не знает и не заботится о том, на что указывают указатели.
Но решение здесь не в том, чтобы предоставить пользовательский конструктор копирования. Для этого нужно использовать структуру данных вместо необработанных указателей (char*
) . И это бывает std::string
(или std::vector<char>
в зависимости от намерения).
1 Таким образом, создавая транзитивное замыкание операции копирования - так обычно применяется глубокое копирование, но, конечно, разработчик операции копирования всегда может выйти из него .