Вы можете привести временное значение (r-значение) к l-значению на время вызова или выражения:
я есть функция, которая принимает указатель на объект пользовательского класса (на самом деле указатели на базовый класс, так что полиморфизм работает). В вызывающей подпрограмме этот объект, однако, исключительно необходим для целей этого вызова, то есть является временным. Например, вот так:
class A { /** stuff */ };
class B : public A { /** stuff */ };
void doSomething( const A* const _p ) { /** stuff */ }
void callingRoutine()
{
A* tempPointer = new B;
doSomething( tempPointer );
delete tempPointer;
}
Теперь, так как мне действительно нужен только объект типаB
в пределах звонкаdoSomething
Есть ли способ сделать это в одну строку? дела
doSomething( new B );
создает утечки памяти (так говорит Вальгринд). Или будет
doSomething( &B );
быть рекомендуемым способом? Последний компилируется, но выдает предупреждения о передаче указателей на временные объекты. Это то, что я хочу сделать, но будет ли так безопасно?