如何在C ++中将常量映射指针初始化为空?

时间:2012-07-05 21:07:57

标签: c++ pointers map

简单的问题,我只是想将地图初始化为空,而不是nullptr。

 const std::map<std::string, std::string>* emptyDictionary;

我试过

const std::map<std::string, std::string>* emptyDictionary = {"", ""};

但显然这不对。 谢谢你们。

3 个答案:

答案 0 :(得分:4)

你忘了制作任何地图 - 你只是做了一个指针!您可以使指针指向动态分配的映射:

 const std::map<std::string, std::string>* emptyDictionary
     = new std::map<std::string, std::string>;

这张地图真的是空的。如果您添加初始化程序{{"", ""}}(您可能会这样做),那么您实际上没有空映射,而是具有一个元素的映射,该元素将空字符串映射为空字符串。

请注意,你永远不能通过const指针修改你的地图,所以你想要这样做有点可疑。

另请注意,肆意动态分配通常是一种糟糕的编程风格。几乎可以肯定有更好的方法来做你需要做的事情,或者根据你的评论,你只是误解了一些东西:获得指针的最好方法是采用地址现有对象:

std::map<std::string, std::string> m;
foo(&m); // pass address of m as a pointer

答案 1 :(得分:2)

const std::map<std::string, std::string>* emptyDictionary 
     = new std::map<std::string, std::string>();

答案 2 :(得分:1)

map的默认(空)构造函数将创建一个空映射http://www.cplusplus.com/reference/stl/map/map/。 只需编写

,即可在堆栈上声明自动分配地图
std::map<std::string, std::string> emptyDictionary();

使用addres-off运算符将其发送到您的函数

yourfunction(&emptyDictionary);

但是,如果字典会比创建它的实例更长,则需要动态分配它,以避免调用它的析构函数。

const std::map<std::string, std::string>* emptyDictionary = new std::map<std::string, std::string>();

然后在调用函数时不需要address-of运算符。

yourfunction(emptyDictionary);

但是,解除分配的责任将由您自己承担。当您不再需要该对象时,您需要使用delete语句删除该对象。

delete emptyDictionary;