在这种情况下如何使用智能指针
how to use smart pointers in this case
有没有更好的方法使用现代 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}
};
}
绝对有更好的写法,你根本不需要指针!
#include <map>
#include <iostream> // just for printing using std::cout
auto GetData()
{
return std::map<int, int>
{
{1,1},
{2,1}
};
}
int main()
{
const auto data = GetData();
for (auto d : data)
{
std::cout << d.first << ", " << d.second << "\n";
}
}
不再有丑陋的指针语法,不再需要手动分配和释放内存,您无需担心任何事情。
有没有更好的方法使用现代 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}
};
}
绝对有更好的写法,你根本不需要指针!
#include <map>
#include <iostream> // just for printing using std::cout
auto GetData()
{
return std::map<int, int>
{
{1,1},
{2,1}
};
}
int main()
{
const auto data = GetData();
for (auto d : data)
{
std::cout << d.first << ", " << d.second << "\n";
}
}
不再有丑陋的指针语法,不再需要手动分配和释放内存,您无需担心任何事情。