gpt4 book ai didi

c++ - 如何在 C++ 中返回堆上的对象?

转载 作者:行者123 更新时间:2023-11-28 02:43:15 24 4
gpt4 key购买 nike

目前我有两个方案,要么返回对象本身,

std::vector<std::vector<std::string> > myfunc()

// initialize a 2d vector (matrix) with fixed size
std::vector<std::vector<std::string> > *res = new std::vector<std::vector<std::string> > (nc, std::vector<std::string>(nr));

// fill res up with some operations

return *res;
}


int main(int argc, char const* argv[])
{
std::vector<std::vector<std::string> > x = myfunc()
// do something with x
return 0;
}

或者返回一个指针:

std::vector<std::vector<std::string> >* myfunc()

// initialize a 2d vector (matrix) with fixed size
std::vector<std::vector<std::string> > *res = new std::vector<std::vector<std::string> > (nc, std::vector<std::string>(nr));

// fill res up with some operations

return res;
}


int main(int argc, char const* argv[])
{
std::vector<std::vector<std::string> >* x = myfunc()
// do something with x
return 0;
}

但我的直觉告诉他们两个都有问题。有什么建议吗?

最佳答案

第一种情况不好。你有内存泄漏。

第二种情况更好。您可以选择释放内存。更好的做法是使用智能指针:std::shared_ptrstd::unique_ptr

std::shared_ptr<std::vector<std::vector<std::string>>> myfunc()
{
// initialize a 2d vector (matrix) with fixed size
std::vector<std::vector<std::string> > *res = new std::vector<std::vector<std::string> > (nc, std::vector<std::string>(nr));

// fill res up with some operations

return std::shared_ptr<std::vector<std::vector<std::string>>>(res);
}

std::unique_ptr<std::vector<std::vector<std::string>>> myfunc()
{
// initialize a 2d vector (matrix) with fixed size
std::vector<std::vector<std::string> > *res = new std::vector<std::vector<std::string> > (nc, std::vector<std::string>(nr));

// fill res up with some operations

return std::unique_ptr<std::vector<std::vector<std::string>>>(res);
}

关于c++ - 如何在 C++ 中返回堆上的对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25234543/

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