Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/164.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 使用shared_ptr创建实例时,指针实例变量会发生什么情况?_C++_Pointers_Vector_Shared Ptr_Ogre3d - Fatal编程技术网

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>直到我首先了解了其他一些事情,我才能够正确地应用这个。谢谢你提供的信息。