C如何将指向临时对象的指针(在堆上)传递给函数?
作者:互联网
我有一个函数,该函数需要一个指向自定义类的对象的指针(实际上是一个指向基类的指针,这样多态性才能起作用).然而,在调用例程中,仅出于该调用的目的而需要该对象,即是临时的.例如这样:
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 );
推荐的方法?后者可以编译,但会发出有关将指针传递给临时对象的警告.这是我想做的,但是这样安全吗?
解决方法:
最干净的方法是
B b;
doSomething(&b);
但是,您真正应该写的内容取决于doSomething函数的功能.如果在callRoutine的末尾销毁b是可以的,那么这是更快,更干净的方法,因为在堆栈上分配的速度比new更快,并且不需要您随后删除b.
标签:argument-passing,c 来源: https://codeday.me/bug/20191012/1901698.html