【发布时间】:2011-08-09 09:01:30
【问题描述】:
我有一个函数,它接受一个指向自定义类对象的指针(实际上是指向一个基类的指针,这样多态性才起作用)。然而,在调用例程中,此对象专门用于此调用的目的,即是临时的。比如这样:
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;
}
现在,由于在对doSomething 的调用中我真的只需要B 类型的对象,有没有办法在一行中做到这一点?正在做
doSomething( new B );
造成内存泄漏(valgrind 这么说)。或者会
doSomething( &B );
是推荐的方式吗?后者可以编译,但会发出有关将指针传递给临时对象的警告。这是我想做的,但是这样安全吗?
【问题讨论】:
-
如果您只想在
doSomething的范围内使用它,为什么还要在其范围之外创建对象?
标签: c++ argument-passing