Я обнаружил ситуацию, которая позволяет мне думать об этом синтаксисе. Рассмотрим умный указатель на класс Base
, который должен содержать указатель на производный класс, и вы хотели бы получить доступ к некоторым не виртуальным объектам производного класса после создания. В этом случае что-то вроде этого является законным и не может быть так плохо:
Derived & d = * new Derived();
d.d_method( ..whatever.. );
d.d_member = ..whatever..;
...
std::unique_ptr<Base> p( &d );
Наконец я все же предпочел маленькие стрелки странным амперсандам:
Derived d = new Derived();
d->d_method( ..whatever.. );
d->d_member = ..whatever..;
...
std::unique_ptr<Base> p( d );
Но я думаю, что в этом случае дело вкуса, особенно если вы используете постоянное количество методов.
Другие вещи, которые приводят либо к утечкам, либо к delete &d;
, просто плохие, плохие, плохие.