{
auto_ptr<B> smart(new B());
A myA(*smart);
}
И указатель, удерживаемый в «smart», и объект «myA» будут уничтожены в конце этой области. Но это должно быть то, что вы хотите с этим фрагментом кода.
Как только область действия заканчивается, myA будет уничтожено первым (объявлено последним).
Затем этот смарт будет уничтожен, а его деструктор удалит указатель.
Поскольку нет никакого способа сослаться на «умный» или «myA», я надеюсь, что вы хотите удалить указатель на этом этапе.
В качестве альтернативы вы можете сделать это:
{
B myB;
A myA(myB);
}