其他分享
首页 > 其他分享> > C如何将指向临时对象的指针(在堆上)传递给函数?

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