C++11 初始化指向对象的指针列表
C++11 Initialization of a list of pointers to objects
EDIT:这个结构是真正的糟糕设计,不要使用它!
是否可以在 C++11 中初始化指向对象的指针列表(同时初始化所有内容)?
例如,假设我想创建以下类型的my_list
:
list<pair<string, map<string, string> *> *>
.
我想用原始值初始化它。
list<pair<string, map<string, string> *> *> my_list = { ??? }
???
:创建指向新原始字符串对的新指针和指向原始字符串映射的新指针。
(为什么我需要这样做:此数据结构存储从文件中读取的配置,但如果找不到该文件,我需要在我的代码中设置默认值)
是的,当然:
list<pair<string, map<string, string> *> *> x {
new pair<string, map<string, string> *> {
"hello", new map<string, string> { {"a", "1"}, {"b", "2"} } },
new pair<string, map<string, string> *> {
"world", new map<string, string> { {"a", "1"}, {"b", "2"} } },
};
这是糟糕的设计。别这样。
旧帖子,但可能有用你可以在 C 中尝试这样的事情,C++非常相似
Typedef struct {
char *name;
int data;
struct MyList *next;
} MyList;
Mylist junk[] = {
{"One" ,1, &junk[1]},
{"Two", 2, &junk[2]},
{"Three",3, (MyList *) 0}
};
MyList *head = &junk[0];
是指向列表头部的指针.....
这些列表非常有用,并且在小型嵌入式中介中很常见。Lisp 和 Forth 立即浮现在脑海中。和许多其他地方。
看看栈流讨论自引用结构定义?
进行列表手术可能是一个问题,因为编译的列表可能存在于非易失性存储器中 - 尽管在更现代的CPU中,这可能是闪存。
正如你在上面的帖子中看到的那样,列表中没有什么本质上的坏处,它们只是使用起来很棘手,使用它们的方法不像过去那样严格。
你经常尝试的糟糕语法(例如)只是C/C++语言的工件,它不是为了在代码中轻松表示指针列表而设计的。
您也可以尝试以下形式
MyList a = {"A",(MyList *) 0};
MyList b = {"B",&a);
另一种常见模式是以编程方式进行初始化
MyList *m = NewMyList("A");
MyListAdd(m,"B");
你可以在Java中找到很多这样的内容,那里有很好的容器类库。缺点是您的启动可能需要额外的几毫秒。
另一种常见的用法是使用相对链接....在上面的数组示例中,将链接替换为 sizeof(MyList)。这使得编程更容易,而且列表变得可
重定位并且可以使用标准的memcpy类型操作进行复制(例如从闪存复制到RAM并返回)。
玩得愉快克里斯
- 为什么这个 std::queue/指向结构的指针列表直到 List.Size() == 0 才释放内存?
- 什么更好?返回对象指针列表?或返回指向对象列表的指针?
- 如何将共享指针列表传递到pybind11中的c++对象
- C++:如何初始化包含具有给定键的指针列表的映射
- 使用继承的指针列表复制构造函数或重载运算符=
- 我应该如何在工厂类中存储弱指针列表?
- Qt单元测试:指针列表上的QCOMPARE函数
- 如何正确释放要配对的指针列表?
- 如何在 c++ 上对指针列表进行排序
- 从地图复制到指针列表
- 我对C 中共享指针列表进行排序的功能未完成类型
- const_iterator引用的指针列表
- 在 c++ 中生成字符串到 std::指针列表的映射
- 访问链表中的结构(带有指向其子实现的指针列表的树)
- 有没有办法使用基于范围的迭代器来迭代对指针列表值的引用?
- 使用迭代器指针 (C++) 从对象指针列表中删除元素
- 无法列出定制类型的指针列表
- 创建指针列表的正确范例是什么
- 如何将指向指针列表的私有指针作为 const 返回
- C++填充指向指针**列表的指针,该列表指向指针地址