【记录一个问题】android opencl c++: 不要Context, CommandQueue类的赋值函数

孤者浪人 提交于 2019-11-30 16:56:40

一开始代码中这样写了:
cl::Context ctx = cl::Context(CL_DEVICE_TYPE_GPU, NULL);
cl::CommandQueue queue= cl::CommandQueue(ctx, devices[device_index],
CL_QUEUE_PROFILING_ENABLE, &err);

运行时发现运行正常,但是始终无法得到正确的结果。

找了另一个正常的例子逐个替换对象,最终发现这两个对象上面的赋值函数导致了问题。
因此,除非看了源码确认可以这么用,否则还是应该避免对象的值拷贝或者使用赋值函数。
很可能新对象虽然得到了所有内容,但是老对象析构后又导致新对象指向的内容出错。

修改为以下代码后正常:
cl::Context* ctx = new cl::Context(CL_DEVICE_TYPE_GPU, NULL);
cl::CommandQueue* queue = new cl::CommandQueue(ctx, devices[device_index],
CL_QUEUE_PROFILING_ENABLE, &err);

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!