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