gpt4 book ai didi

c++ - 这里有内存泄漏吗?试图通过函数传递对象

转载 作者:行者123 更新时间:2023-11-28 03:00:51 25 4
gpt4 key购买 nike

我有以下功能:

int getNumber( MyObject &obj ) {
.....
}

我可以这样做:

MyObject obj; // obj.x = 10; obj.y = 20; ...setting up the object
if ( getNumber( obj ) > 35 ) { // something to do...
}

但是当我尝试做这样的事情时:

MyObject getObj() { // i need to return an object here
MyObject newObj; // setting up the object: newObj.x = .....
return newObj;
}
if ( getNumber( getObj() ) > 35 ) {...}

我收到一条警告:“对‘MyObject’类型的非常量左值引用无法绑定(bind)到‘MyObject’类型的临时对象”。我可以这样解决:

MyObject obj = getObj();
if ( getNumber( obj ) > 35 ) {...}

但是用起来很不舒服。我想创建另一个函数并像这样使用它:

int getNumber2( MyObject obj ) {
MyObject newObj; // now it's not a temporary variable I think :)
return getNumber( newObj );
}
if ( getNumber2( getObj() ) {...}

这里是否存在内存泄漏问题?也许有一些有趣的方法可以解决该警告? :)

最佳答案

它告诉您,当您调用 getNumber( getObj() ) 时,不应允许 getNumber 修改对象。

要解决此问题,请尝试:

int getNumber(const MyObject &obj ) {
// You code should not modify obj
}

顺便说一句,没有内存泄漏。

对于您的 int getNumber2( MyObject obj ),我看不到调用的意义

int getNumber2( MyObject obj )
{
MyObject newObj; // now it's not a temporary variable I think :)
return getNumber( newObj );
}

这意味着您不必理会作为参数传递给 getNumber()MyObject,因为那不是 getNumber2 获取的对象。 .

关于c++ - 这里有内存泄漏吗?试图通过函数传递对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20893202/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com