我正在尝试编写具有 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
为什么会发生这些情况,解决上述问题的正确方法是什么?