删除结构的成员,并将其重新制作为其他内容的副本,而不使用 new
Delete a member of a structure, and remake it as a copy of something else without using new
所以我正在使用一个实际上没有那么实用的API。(具体为快速触觉)为了使我有工作的东西,我需要删除结构中的一个对象,再次创建它,(不使用new,因为对象的构造函数没有按照我需要的方式工作),然后将其设置为某些东西。
我正在尝试做一些类似的事情
delete data.cursor;
Cursor* data.cursor = (Cursor*)malloc(sizeof(Cursor));
data.cursor = data.cursors[index];
但这会导致崩溃(编辑抱歉,它没有编译是我想说的,但我不明白编译器错误)
附加信息:API 的工作方式,我需要向它发送一个指向项目的指针,它最初接受该项目并在整个执行过程中写入信息。我正在尝试更新光标类型对象上的网格。它提供了更新功能以加载新网格,但它们非常昂贵,只能以 ~3 fps 的速度运行。我的解决方案是在启动时将对象加载到数组中,然后只需切换出程序查找的对象作为光标即可。
我通常是C++新手,我的经验都是在没有指导的情况下坐下来打字,所以我可能缺少一些基本C++的东西。
编辑:只是为了清楚,这样做有效,只是非常缓慢
delete data.cursor;
data.cursor = new Cursor("filename");
其中 data.cursors[index] 在启动时以完全相同的方式声明
看起来好像您使用malloc()
在地址上分配了内存,然后将地址值设置为某个对象,也许?您最可能想要的是如下所示的一行
*data.cursor = data.cursors[index];
*
将取消引用该位置的内存,以便您可以设置其值。但是请注意,这将调用operator=
。
只是一个旁注:
将new
/delete
与malloc()
/free()
混合通常是一个坏主意,因为您需要跟踪对象的分配方式。也就是说,您必须将正确的释放调用与其各自的分配调用一起使用。
它不会编译,因为您正在尝试声明一个成员:
delete data.cursor;
Cursor* data.cursor = (Cursor*)malloc(sizeof(Cursor));
是非法的,它应该是:
delete data.cursor;
data.cursor = (Cursor*)malloc(sizeof(Cursor));
另外,由于cursor
是一个指针,所以
data.cursor = data.cursors[index];
将使指针指向该内存,因此先前分配的内存(通过malloc(sizeof(Cursor));
将被泄漏。您可能正在这里寻找memcpy
。
- 如果"new int"返回"int*",那么为什么"new int[n]"不返回"int**"?
- 有没有一种方法可以使用placement new将堆叠对象分配给分配的内存
- 重载运算符new[]的行为取决于析构函数
- 用callgrind追踪不必要的副本
- 关于:C++中异常对象的范围:为什么我没有得到副本?
- 过载'operator new'如何导致无限循环?
- 创建具有 new in 函数和"this is nullptr"异常的对象
- Codelite C++ new project
- 在为LINUX创建共享库时,如何避免STL的私有/弱副本
- 在类c++中使用new声明数组
- g++用户定义的动态链接库上的全局new和delete运算符
- 检查注册表项是否链接到(或副本)另一个注册表项
- 如果整个应用程序是虚拟映射的,为什么 new 会进行系统调用?
- 在将 new 与指针一起使用时,创建数组的指定长度
- 为什么构建目录中新构建的共享库与安装目录中的副本具有不同的依赖项集?
- C++基于范围的 for 循环和元素副本
- 创建提升::shared_ptr的深层副本
- 如何从构造函数副本 T(const T&)调用对象 T?
- 副本初始化的默认模板参数推导
- 删除结构的成员,并将其重新制作为其他内容的副本,而不使用 new