我是一名专家级 Java 程序员,试图将我的知识移植到 C++ 上。这不是家庭作业,只是我试图学习 C++ 等价物的一个概念。
我正在尝试做的是使用循环“生成”自定义类型的对象列表。这就是我在 Java 中的做法:
public class TestClass
{
private ArrayList<ExampleClass> _exampleObjects;
private int _numObjects = 10;
public void populateList()
{
_exampleObjects = new ArrayList<ExampleClass>();
for(int i = 0; i < _numObjects; i++)
{
_exampleObjects.add(new ExampleClass());
}
}
public void doStuffWithListItems()
{
for(ExampleClass e : _exampleObjects)
{
e.performAction();
}
}
}
超级简单的东西。创建一个列表,遍历任意循环并向其中添加对象。然后,遍历这些对象并将它们用于任何目的。
测试类.h:
class TestClass
{
public:
// Constructor, copy constructor, destructor definitions
void populateList();
void doStuffWithListItems();
private:
std::vector<ExampleClass> _exampleObjects;
const int _numObjects = 10;
};
测试类.cpp:
void TestClass::populateList()
{
for(int i = 0; i < _numObjects; i++)
{
ExampleObject obj;
_exampleObjects.push_back(obj);
/* What actually goes here in place of obj? */
}
}
void TestClass::doStuffWithListItems()
{
for(auto it = _exampleObjects.begin(); it != _exampleObjects.end(); it++)
{
/* What do i do with my iterator to access my object? */
}
}
我的理解是,我在第一个循环中初始化我的对象时,它们会超出范围并在每次循环迭代结束时死亡。那正确吗?如果是这样,我如何制作持久实例?
我对 shared_ptr<> 进行了试验,显然能够持久地存储它们,但我一生都无法弄清楚如何从 shared_ptr<> 的迭代器中取消引用。
我觉得这应该是一个非常简单的概念。我只是似乎无法解决。我已经阅读了很多关于 C++ 范围和循环的内容。我似乎在两者上都找不到任何东西。