jan*_*048 1 c++ argument-passing
我有一个函数,它接受一个指向自定义类对象的指针(实际指向一个基类,这样多态就起作用).然而,在调用例程中,该对象仅用于该调用的目的,即是临时的.例如这样:
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;
}
Run Code Online (Sandbox Code Playgroud)
现在,因为我真的只需要类型的对象B的通话中doSomething,有没有办法做到这一点的一条线?干
doSomething( new B );
Run Code Online (Sandbox Code Playgroud)
造成内存泄漏(valgrind如此说).或者会
doSomething( &B );
Run Code Online (Sandbox Code Playgroud)
是推荐的方式?后者编译但会发出有关将指针传递给临时对象的警告.这就是我想要的,但这样安全吗?
如果您可以更改被调用函数的签名,请将其更改为:
void doSomething( A const& obj );
Run Code Online (Sandbox Code Playgroud)
然后你可以用:
doSomething( B() );
Run Code Online (Sandbox Code Playgroud)
如果你不能,应该声明一个局部变量:
void callingRoutine()
{
B temp;
doSomething( &temp );
}
Run Code Online (Sandbox Code Playgroud)
如果调用函数较长,并且如果没有立即销毁temp,则会出现问题,您可以将其附加在其他函数中{...}:
void callingRoutine()
{
{
B temp;
doSomething( &temp );
}
// More code here...
}
Run Code Online (Sandbox Code Playgroud)
但是,一般来说,如果有必要,您的功能可能太长.
| 归档时间: |
|
| 查看次数: |
1901 次 |
| 最近记录: |