我有一个函数,该函数需要一个指向自定义类的对象的指针(实际上是一个指向基类的指针,这样多态性才能起作用)。然而,在调用例程中,仅出于该调用的目的而需要该对象,即是临时的。例如这样:

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 );

会造成内存泄漏(valgrind这样说)。还是会
doSomething( &B );

推荐的方法?后者会编译,但会发出有关将指针传递给临时对象的警告。这是我想做的,但是这样安全吗?

最佳答案

最干净的方法是

B b;
doSomething(&b);

但是,您真正应该写的内容取决于doSomething函数的功能。如果可以在b的末尾销毁callingRoutine很好,那么这是更快,更干净的方法,因为在堆栈上分配比new更快,并且不需要您随后删除b

10-07 16:42
查看更多