4 つの視点を持つアプリケーションを作成しようとしています。すべてのビューポートで参照されるシーン オブジェクトが必要です。私がやりたいことは、シーン オブジェクトが変更された場合に、すべての視点が更新されることです。これが私が今それを実装しようとしている方法です:
#include <iostream>
#include <vector>
using namespace std;
class Scene
{
};
class Viewport
{
public:
Viewport( Scene &scene );
void draw();
private:
Scene *mScene;
};
Viewport::Viewport( Scene &scene )
{
cout << mScene << endl;
cout << &scene << endl;
mScene = &scene;
cout << mScene << endl;
cout << &scene << endl << endl;
}
void Viewport::draw()
{
cout << &mScene << endl;
}
int main( int argc, char *argv[] )
{
Scene mScene;
vector<Viewport> mViewPorts;
mScene = Scene();
cout << "init: " << endl;
for( int i = 0; i < 4; i++ )
mViewPorts.push_back( Viewport( mScene ) );
cout << "main: " << endl;
cout << &mScene << endl << endl;
cout << "draw: " << endl;
for( int i = 0; i < 4; i++ )
mViewPorts[i].draw();
}
私の問題は次のとおりです
1. 現在、最初のビューポートは空のシーン ポインターをアドレス CCCCCCCC で初期化しています。これは、メイン シーンのアドレスに更新されます。これが私が達成しようとしていることです。
CCCCCCCC <- mScene before
0016FBD3 <- &scene before
0016FBD3 <- mScene after
0016FBD3 <- &scene after
ただし、他のビューポイントは、CCCCCCCC ではなく、正しいアドレスで既に開始されています。なぜこうなった?
ビューポート 2、3、4 では次のようになります。
0016FBD3
0016FBD3
0016FBD3
0016FBD3
2. しかし、私の主な問題は、私のコンセプトが機能しないことです。draw() を呼び出すと、ビューポートはすべて、以前に設定したものとはまったく異なるアドレスを持っています。
draw:
00398730
00398734
00398738
0039873C
なぜこれらが起こっているのでしょうか。また、上記の問題を解決する正しい方法は何ですか?