【发布时间】:2016-01-14 09:09:08
【问题描述】:
我正在尝试找出一种方法来跟踪我创建的类的所有实例,以便我可以使用标题字符串(或 int ID)随时访问它们
我决定使用指向每个实例的静态指针向量,然后在创建每个实例时,我会添加一个指向该向量的指针。
这在一定程度上有效,但在某一时刻,向量的每个元素内的值似乎会重置/获得随机分配的值,我无法弄清楚发生了什么。
我在这里将对象添加到向量中:
SWindow::SWindow(LPCWSTR WindowClass, LPCWSTR Title, UINT Style, int x, int y, int height, int width, HWND hParWnd, HINSTANCE hInstance)
:
x(x),
y(y)
{
hWnd = CreateWindowEx(NULL, WindowClass, Title, Style, x, y, height, width, hParWnd, NULL, hInstance, NULL);
SWindows.push_back(this);
值改变的函数是:
它是SWindow 类的成员
SWindow.h:
static SWindow* GetSWindow(wstring ws);
SWindow.cpp:
SWindow* SWindow::GetSWindow(wstring ws)
{
for (int i = 0; i < SWindow::SWindows.size(); i++)
{
if (SWindows[i]->title == ws)
{
return SWindows[i];
}
else
{
}
}
return 0;
}
我正在使用不同的类访问函数:
SWindow* pPlayViewer = SWindow::GetSWindow(L"Viewer");
另外,如果这是做我想做的事情的坏方法,请告诉我更好的方法。 谢谢!
【问题讨论】:
-
您的静态变量实际上是一个全局变量,这通常是不好的代码气味。您不能将您的(非静态)向量传递给需要对其进行读/写的每个人吗?
标签: c++ class pointers vector static