Вы можете привести временное значение (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 );

быть рекомендуемым способом? Последний компилируется, но выдает предупреждения о передаче указателей на временные объекты. Это то, что я хочу сделать, но будет ли так безопасно?

Ответы на вопрос(8)

Ваш ответ на вопрос