C++矢量大小为零
C++ Vector Size is Zero
我正在尝试创建一个函数,该函数可以渲染displayobject对象向量中的所有内容(在另一个线程上)。我正在使用SDL线程。
这是显示对象。h:
class DisplayObject
{
protected:
int width;
int height;
int x;
int y;
SDL_Texture* texture;
SDL_Renderer* renderer;
public:
~DisplayObject();
int getX();
void setX(int x);
int getY();
void setY(int y);
int getWidth();
void setWidth(int width);
int getHeight();
void setHeight(int height);
SDL_Texture* getTexture();
SDL_Renderer* getRenderer();
};
在graphics.h中,我有以下变量:
std::vector<DisplayObject> imgArr;
SDL_Thread* renderThread;
static int renderLoop(void* vectorPointer);
此代码在图形构造函数中:
TextLabel textLabel(graphics->getRenderer(), 300, 80, "Hallo Welt", 50, Color(255, 0, 255), "Xenotron.ttf");
//TextLabel inherits from DisplayObject
imgArr.push_back(textLabel);
renderThread = SDL_CreateThread(Graphics::renderLoop, "renderLoop", &imgArr);
这是渲染循环函数:
int Graphics::renderLoop(void* param)
{
int counter = 0;
bool rendering = true;
std::vector<DisplayObject>* imgArr = (std::vector<DisplayObject>*)param;
while (rendering)
{
cout << imgArr->size() << endl;
counter++;
if (counter > 600)
{
rendering = false;
}
SDL_Delay(16);
}
return 0;
}
问题是它只在控制台中打印0。它为什么这么做?它应该写1,因为我把对象推入其中。
在std::vector<DisplayObject>
中插入TextLabel
时,矢量中存储的不是原始TextLabel
对象,而是由TextLabel
构建的DisplayObject
副本。您要做的是使用new
创建TextLabel
,存储指向它们的指针,并在不再需要它们时调用delete
。
最好的解决方案是使用boost::ptr_vector<DisplayObject>
——当您从中擦除对象时,它会自动调用delete
。http://www.boost.org/doc/libs/1_57_0/libs/ptr_container/doc/ptr_container.html
如果您不能使用Boost,但可以使用C++11,则可以使用std::vector<std::unique_ptr<DisplayObject>>
。
相关文章:
- 芬威克树(BIT).找到具有给定累积频率的最小索引,单位为 O(logN)
- 最小的CMake构建为Android
- 将"-01"替换为"-02" 英特尔编译器选项会导致 FPE 在较小的 for 循环行程计数中抛出
- Gtkmm 窗口为空白,不显示任何小部件或标题
- 在向量中查找大于 0(或通常为 k)的最小元素的最佳方法是什么?
- 如何将我的小程序转换为用于项目的函数?
- 将一个小的 C 定义重写为"normal" C++函数
- Qt:无法直接为带有子项的小部件添加滚动条
- 将最小值整数转换为无符号长整型
- 如何从 css 资源为 gtkmm3 中的多个 glade 小部件设置主题
- 尝试使用 x86 asm SSSE3 将大端转换为小端序
- 在QT中为小部件添加彩色边框的最佳方法是什么
- 如何将小端格式的QByteArray转换为无符号长整型
- 查找最小数字,该数字不为零
- 在索引0为0的数组中查找非零最小值C++
- 在运行时为随机分布类成员设置最小和最大边界?
- 使用数组将最后一个最大值更改为第一个最小值
- 以 C/C++ 为单位的数组中最小值的地址
- 为提升的小部件设置父 QWidget
- 搜索一组点,其长度总和最小为矩形.算法是什么