!带有指针的类和struct赋值的本质 - host to device

//这个变量必须在while循环外面
//原因是当将loadModels[modelNum].g_3DModel[0]赋值给新建类后
//里面的数值拷贝过去了,而里头的指针只给了地址
//所以如果这个调用了析构函数,即出了它的作用域,
//指针的值也就销毁了

参考

g_3DModel的struct是

struct t3DModel //模型信息结构体
{
int numOfObjects; // 模型中对象的数目
int numOfMaterials; // 模型中材质的数目
vector<tMatInfo> pMaterials; // 材质链表信息
vector<t3DObject> pObject; // 模型中对象链表信息
FBox3 boundBox; //模型的外包 2013.12.9
};

这里没有指针,但是里头的object有指针

struct t3DObject //对象信息结构体
{
int numOfVerts; // 模型中顶点的数目
int numOfFaces; // 模型中面的数目
int numTexVertex; // 模型中纹理坐标的数目
int materialID; // 纹理ID
bool bHasTexture; // 是否具有纹理映射
bool bVisible;//对象是否可见,默认是可见
char strName[255]; // 对象的名称
FPoint3 *pVerts; // 对象的顶点
FPoint3 *pNormals; // 顶点的法向量
FPoint2 *pTexVerts; // 纹理UV坐标
tFace *pFaces; // 对象的面信息
FPoint3 *pFaceNormals; // 面的法线
}; ,

所以如果在GPU里头要编程,带有指针的地方,需要逐个拷贝,而不是整体拷贝,因为用类来实现整体拷贝,指针的地方只拷贝了地址,这样在device无法access host的地址,造成读取失败

时间: 2024-08-29 05:34:51

!带有指针的类和struct赋值的本质 - host to device的相关文章

C++之中this指针与类的六个默认函数小结

我们先来看看this指针.之前看过一篇关于this指针的文章,觉得写的很好,今天决定自己来写一写,顺便总结一下C++里面关于类的一些内容. 什么是this指针呢?简单的说它是一个指向类的实例的指针,就好像当我们在进入一个房子之后,可以看见房子里的桌子,椅子.地板等, 但是看不到房子的全貌.对于一个类的实例来说,你可以看到它的成员函数.成员变量,但是实例本身呢?this是一个指针,它时时刻刻指向这个实例. 来看看this指针的特性: 1)this指针的类型是一个类类型 * const, 这表示什么

C++智能指针管理类

1.程序员明确的进行内存释放 对于c++程序员,最头脑的莫过于对动态分配的内存进行管理了.c++在堆上分配的内存,需要程序员负责对分配的内存进行释放.但有时内存的释放看起来并不件很轻松的事,如下程序 void func() { int *p = new int(0); if(一些判断) { return; } p = new int(1); delete p; } 这个函数没有任何意义,只为说明问题.func函数至少有三处问题.1.一旦if的判断条件成立,就会立马执行返回语句.此时p所指向的内存

C++智能指针模板类复习

//C++智能指针模板类复习 #include<iostream> #include<memory> using namespace std; //智能指针用于确保程序不存在内存和资源泄漏且是异常安全的. //C++98中提供了auto_ptr,C++11摒弃了auto_ptr,并提出了unique_ptr .shared_ptr.weak_ptr void show1() { int* p = new int(4); cout << *p << endl;

关注C++细节——含有本类对象指针的类的构造函数、析构函数、拷贝构造函数、赋值运算符的例子

本例只是对含有本类对象指针的类的构造函数.析构函数.拷贝构造函数.复制运算符使用方法的一个简单示例,以加深对构造函数和拷贝控制成员的理解. 读C++ primer 5th 第13章后加上自己的理解,完整的写了下课后习题的代码. 第一版: #include <string> #include <iostream> using namespace std; class TreeNode{ private: string value; TreeNode *left; TreeNode *

《C++ Primer Plus》16.2 智能指针模板类

智能指针是行为类似于指针的类对象,单这种对象还有其他功能.本节介绍三个可帮助管理动态内存分配的智能指针类.先来看看需要哪些功能以及这些功能是如何实现的.请看下面的函数:void remodel(std::string & str){    std::string * ps = new std::string(str);    ...    str = ps;    return;}您可能发现了其中的缺陷.每当调用时,该函数都分配堆中的内存,单从不回收,从而导致内存泄漏.您肯呢哥也知道解决之道——

C++_智能指针模板类

智能指针是行为类似于指针的类对象,但这种对象还有其他功能. 本节介绍三个可帮助管理动态内存分配的智能指针模板(auto_ptr.unique_ptr和shared_ptr). void remodel(std:string & str) { std::string * ps = new std::string(str); ... str = ps; return; } 这段代码有缺陷,每当调用时,该函数都分配堆中的内存,但从不回收,从而导致内存泄漏: 但是有解决之道——在return语句前添加下

使用反射和泛型,动态读取XML创建类实例并赋值

[狗刨学习网]unity极致学院,致力于打造业内unity3d培训.学习第一品牌. 前言: 最近小匹夫参与的游戏项目到了需要读取数据的阶段了,那么觉得自己业余时间也该实践下数据相关的内容.那么从哪入手呢?因为用的是Unity3d的游戏引擎,思来想去就选择了C#读取XML文件这个小功能.网上的例子倒也不少,但总是觉得缺点什么.比如读取xml文件之后该如何处理?看到的文章基本上都是手动创建一个目标类的实例,然后手动从读取的XML文件的内容中给刚才创建的目标类实例相关字段赋值.缺点什么呢?对嘞,感觉上

自己动手之使用反射和泛型,动态读取XML创建类实例并赋值

前言: 最近小匹夫参与的游戏项目到了需要读取数据的阶段了,那么觉得自己业余时间也该实践下数据相关的内容.那么从哪入手呢?因为用的是Unity3d的游戏引擎,思来想去就选择了C#读取XML文件这个小功能.网上的例子倒也不少,但总是觉得缺点什么.比如读取xml文件之后该如何处理?看到的文章基本上都是手动创建一个目标类的实例,然后手动从读取的XML文件的内容中给刚才创建的目标类实例相关字段赋值.缺点什么呢?对嘞,感觉上不够简单和智能. 正所谓驱动科技发展的原因就是懒,为了使我们的小工具能够傻瓜到只需要

c++,派生类对象可以对基类赋值,基类对派生类不可以赋值

#include <iostream> using namespace std; class DemoA { public: int m_a; void show(); DemoA(int val); }; DemoA::DemoA(int val) { m_a = val ; } void DemoA::show() { cout<<"ashow: DemoA.m_a="<<this->m_a<<endl; } //-------