C++ 使用shared_ptr创建实例时,指针实例变量会发生什么情况?
好的,这里我有一个复杂类的小例子C++ 使用shared_ptr创建实例时,指针实例变量会发生什么情况?,c++,pointers,vector,shared-ptr,ogre3d,C++,Pointers,Vector,Shared Ptr,Ogre3d,好的,这里我有一个复杂类的小例子 class LivingObject { Ogre::SceneNode* myNode; Gorilla::ScreenRenderable* myScrRend; Gorilla::Layer* myRendLayer; Gorilla::Rectangle* myRendRect; int Health,Energy,Strength,Dexterity,Intelligence; float Speed,posX,posY,posZ; //
class LivingObject
{
Ogre::SceneNode* myNode;
Gorilla::ScreenRenderable* myScrRend;
Gorilla::Layer* myRendLayer;
Gorilla::Rectangle* myRendRect;
int Health,Energy,Strength,Dexterity,Intelligence;
float Speed,posX,posY,posZ;
//Assortment of functions
};//Note: Specific members and functions are public/private, but is not relevant
这里是一些游戏类信息
class myGame
{
Ogre::Viewport* myViewport;//random
LivingObject LiveObjectArray[100]//question 1: holds the array of objects from a parsed file
std::vector<std::tr1::shared_ptr<LivingObject> > spawnList;//question 2
};
classmygame
{
Ogre::Viewport*myViewport;//随机
LivingObject LiveObjectArray[100]//问题1:保存解析文件中的对象数组
std::vector spawnList;//问题2
};
1) 我应该如何声明LivingObject
以便以后复制它(我使用的当前方法给出了一个错误:从'LivingObject*'转换为请求的非标量类型'LivingObject'
)LivingObject TestObj=new LivingObject代码>
1a)在创建新对象时,我应该如何处理像LivingObject::myNode这样的指针?还是有其他问题?(注意:我使用的是Ogre3D,这就是教程让我设置一切的方式…)
2) 当上述问题解决后,我将如何将其放入一个共享的ptr向量中,并访问该函数的特定元素(例如,spawnList[15](或->)攻击(目标);
1)为了复制一个对象,请使用以下代码:
string s;
string t = s;
1a)这些指针代表什么?如果它们表示独占所有权,则必须复制它们在复制所属对象时指向的对象。检查任何好的文本对构造函数和析构函数的介绍。考虑制作<代码> LyvgObjtubs/Copy>类不可复制.< /P>
2) 试试这个:
shared_ptr<T> p(new T);
vector<T> v;
v.push_back(p);
...
shared_ptr<T> q = v[0];
q->member_function();
shared_ptr p(新T);
向量v;
v、 推回(p);
...
共享_ptr q=v[0];
q->member_函数();
作为最后的建议,你需要一本好的C++书籍。另一个很好的资源是一个由其他用户组成的在线社区,比如这里的这个。如果可能的话,尽量减少你的代码。只要LivingObject
有一个示例指针就足够了。祝你好运 new
返回一个指针,因此您的定义应为LivingObject*TestObj=newlivingObject代码>好的,我需要新建
来制作另一个对象吗?另外,对于Ogre3d推荐的指针所产生的错误,我该怎么办?如果不是,那么我只需执行LivingObject NewObj;NewObj.giveVars(…)代码>?我非常感谢关于向量的信息。至于1a)Ogre::sceneode*myNode
是我在ogre3d中创建的一个对象变量:Ogre::sceneode*headNode=mSceneMgr->getrootsceneode()->createchildsceneode(“headNode”)代码>这是从Ogre3D的第一个教程中直接获得的。当该对象是指针时,它将如何影响LivingObject
?或者我可以通过Ogre::sceneode headNode=mSceneMgr->getrootsceneode()->createchildsceneode(“headNode”)将其设置为对象吗代码>?或者我会像它一样使用它吗?你会考虑什么重要的C++文本的好文本?或者是几个网站?我在学习C++时使用的。那是大约13年前的事了,虽然文档从那时起就更新了,但我没有深入研究过它。在C++中也有一个版本的下载。我还有Bjarne Stroustrup的C++书,这里的书很好,有几个例子或非常优雅的代码。仍然想知道如何处理指针对象,比如<代码> OGRE::StuteNoD**/Cuff>和<代码>大猩猩::可屏幕渲染*/Calp>直到我首先了解了其他一些事情,我才能够正确地应用这个。谢谢你提供的信息。