Gui*_*ume 0 c++ memory pointers class vector
我听说在C ++中不建议使用指针,但我不明白为什么。
我的问题是我想创建一个类对象向量来管理我的类。
vector<MyClass> vectorOfClass;
Run Code Online (Sandbox Code Playgroud)
自然地,为了获得更好的性能,我应该使用类对象指针的向量吗?
vector<MyClass *> vectorOfClass;
Run Code Online (Sandbox Code Playgroud)
也许可以创建类对象的引用向量?
vector<MyClass &> vectorOfClass;
Run Code Online (Sandbox Code Playgroud)
所以我的问题是:
也许可以创建类对象的引用向量?
否。引用不是C ++中的对象。因此,您无法创建引用数组或指向引用的指针。但是std::reference_wrapper,您可以使用将引用包装在对象中的。
创建类对象向量的最优化方法是什么?
始终取决于情况。测量,分析并根据您的数据做出决定。
这些方式有什么区别?
它们以不同的方式存储。
值向量在内存中看起来像这样:
+----------------------+
| std::vector<MyClass> |----
+----------------------+ |
|
-------------------------
|
v
+-------------+-------------+-------------+-------------+
| MyClass | MyClass | MyClass | MyClass |
+-------------+-------------+-------------+-------------+
Run Code Online (Sandbox Code Playgroud)
指针向量如下所示:
+-----------------------+
| std::vector<MyClass*> |---
+-----------------------+ |
|
------------------
|
v
+-------+-------+-------+-------+
| ptr | ptr | ptr | ptr |
+-------+-------+-------+-------+
| | | |
v | v |
+-------------+ | +-------------+ |
| MyClass | | | MyClass | |
+-------------+ | +-------------+ |
v v
+-------------+ +-------------+
| MyClass | | MyClass |
+-------------+ +-------------+
Run Code Online (Sandbox Code Playgroud)
两者都有优点和缺点。
对于值:
对于指针:
std::unique_ptr拥有的内存,并且很可能会明确分配每个对象。分配大量不同的对象很慢。默认选择应为std::vector<MyClass>。到目前为止,这是最简单的方法,适用于大多数情况。通常,当我需要引用那些对象时,我倾向于在向量中使用稳定的索引,只要中间没有删除任何元素即可。
| 归档时间: |
|
| 查看次数: |
103 次 |
| 最近记录: |