【发布时间】:2018-08-03 00:22:22
【问题描述】:
有没有更好的方法来使用现代 c++ 和智能指针编写这段代码?我想避免通过显式调用 new 和 delete 来处理指向指针类型语法和手动内存管理的可怕指针。
#include <map>
void GetData(std::map<int, int>** data);
int main()
{
std::map<int, int>* data = nullptr;
GetData(&data);
delete data;
return 0;
}
void GetData(std::map<int, int>** data)
{
*data = new std::map<int, int>
{
{1,1},
{2,1}
};
}
【问题讨论】:
-
主
data分配在堆上是否有原因,或者您只是来自 Java/C# 背景并且出于习惯这样做? -
你应该学会通过引用而不是指针传递东西,就像@Frank所说的那样,根本没有理由动态分配地图。你所要做的就是
std::map<int, int> data{{1, 1}, {2, 1}}。 -
@FeiXiang,好吧,我在这里给 OP 一个怀疑的好处,这是一个 MCVE,所以他们实际上可能需要动态分配。我觉得这个问题无法正确回答,我们知道这是有意还是无意。
-
我试图设计一个更简单的场景示例。我的问题可能不够公正。这种情况是数据结构需要填充在与调用者不同的位置,但被调用者需要使用该数据。我想以尽可能少的开销来做到这一点。我可能可以用更清晰的问题示例发布一个不同的问题
-
@BKS 听起来您可能正在寻找参考。如果您在更好的示例中进行编辑,那将会很有帮助。
标签: c++ memory-management c++17 smart-pointers