作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
目前我有两个方案,要么返回对象本身,
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_ptr
或 std::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/
我是一名优秀的程序员,十分优秀!