Вы используете new
.Нет ничего плохого в использовании new
, его следует использовать как можно реже.
(delete
, с другой стороны, почти никогда не следует использовать, так как его использование должно всегда быть инкапсулированным в некоторый дескриптор RAII, такой как интеллектуальный указатель или контейнер.)
Обратите внимание, что при использовании интеллектуальных указателей вы всегда должны присваивать результат new
именованному интеллектуальному указателю илииспользуйте reset
.В вашем случае вы хотели бы использовать:
A() : b(new B()) { }
или:
A()
{
std::unique_ptr<B> x(new B());
b = std::move(x);
}
или:
A() { b.reset(new B()); }
(Почему это важно, см.раздел «Лучшие практики» boost::shared_ptr
документации .)