Я наткнулся на этот код в онлайн-тесте. Безопасен ли этот код? Какова продолжительность жизни литералов, которые я использую для создания экземпляров? Ли буквальный «Джон» уничтожается после создания экземпляра p1 (поскольку это завершает выражение, в котором используется литерал).Инициализация элемента char * со строковым литералом
class Person {
public:
char *name;
Person(char *s) { name = s}
inline void setName(char *newName) {name = newName;}
};
int main(){
Person p1("John");
Person p2("Steve");
p1.setName("Rick");
p2 = p1;
return 0;
}
Определите «безопасный». Если вы задокументируете, что класс может быть построен только из строкового литерала, тогда это будет хорошо, но в противном случае у него будут серьезные проблемы с правами собственности/жизни. Это очень плохой дизайн. Что касается «секции .bss исполняемого файла», то это вопрос реализации, не определенный C++, и реализация не была задана в вопросе. –
_ «Исключение будет выбрано, если вы попытаетесь освободить его». Это также детализация реализации, вероятно, вплоть до чистой вероятности. Код для стандартов, и у вас будет намного лучшее время. Это буквально, почему они там. –