嗨,我是业余爱好者。我陷入了基于范围的循环中。
我知道该如何使用
std::vector<ExampleClass> vec;
但是我不知道这个:
std::vector<ExampleClass*> vec;
我应该使用哪一个?
for (auto x : vec)
for (auto& x : vec)
谢谢。
答案 0 :(得分:1)
这取决于。
第一个为您提供每个循环周期的实际指针的副本。 因此,
*x
取消引用来访问对象第二个为您引用,该指针存储在向量的实际元素中。 因此,
重要 如果使用最后一个选项,则可能会导致内存泄漏,如果没有指针指向用新创建的ExampleClass对象!
您必须删除使用新创建的矢量的每个元素!
因此,最好使用unique_ptr
或smart_ptr
!使用智能指针将所有权和破坏语义留给它们使用。
我将使用第二个,因为它可以为您节省一个副本,但是第一个是保护程序,而指针的副本则便宜(请参阅下面Olaf的评论)。
或for (auto const& x : vec)
;-)