Хотя при разыменовании указателя (т. Е. При использовании «* s» вместо «s») есть более крупная рыба, которую нужно жарить! Если нет веской причины для помещения объекта в кучу, вы не должны делать это:
int main()
{
Snipped s;
std::cout << s << '\n' << s;
}
Я нашел использование new
и более того delete
довольно редко в программах, которые я пишу. Помимо простого кода это удобно также часто приводит к более быстрым программам. Если вам действительно нужно выделить что-то в куче, используйте какой-нибудь умный указатель, чтобы убедиться, что объект автоматически освобождается:
int main()
{
std::unique_ptr<Snipped> s(new Snipped);
std::cout << *s << '\n' << *s;
}
В качестве дополнительного примечания не используйте std::endl
, если только вы действительно не собираетесь очищать поток: я обнаружил, что неправильное использование std::endl
является основной причиной огромных проблем с производительностью более одного раза. Конечно, в большинстве случаев это не имеет значения, но в еще большем количестве случаев вас не волнует флеш. Если вам не нравится использовать '\n'
или "\n"
, вы можете использовать собственный манипулятор:
std::ostream& nl(std::ostream& out) { return out << '\n'; }
При этом вы можете использовать nl
вместо std::endl
и не страдать от постоянного сброса потока.