私は専門家レベルの 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();
}
}
}
超シンプルなもの。リストを作成し、任意のループを反復してオブジェクトを追加します。次に、それらのオブジェクトをループして、あらゆる目的に使用します。
TestClass.h:
class TestClass
{
public:
// Constructor, copy constructor, destructor definitions
void populateList();
void doStuffWithListItems();
private:
std::vector<ExampleClass> _exampleObjects;
const int _numObjects = 10;
};
TestClass.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++ のスコープとループについて多くのことを読みました。私は両方で何かを見つけることができないようです。