c++ - 当使用shared_ptr创建实例时,指针实例变量会发生什么情况?

标签 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;
 //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
};

1) 我应该如何声明 LivingObject 以便稍后复制它(我当前使用的方法给出了一个错误:从 'LivingObject*' 转换为非标量类型 ' LivingObject' 请求)LivingObject TestObj=new LivingObject;

1a) 在创建新对象时,我该如何处理像 LivingObject::myNode 这样的指针,我应该将它们创建为对象吗?或者还有什么问题吗?(注意:我使用的是 Ogre3D,这是教程让我设置所有内容的方式...)

2)当上述问题解决后,我如何将其放入shared_ptr vector 并访问函数的特定元素(例如spawnList[15]。(或->)Attack(target);

最佳答案

1) 要复制对象,请使用以下代码:

string s;
string t = s;

1a) 这些指针代表什么?如果它们代表独占所有权,则在复制拥有对象时必须复制它们指向的对象。检查任何关于构造函数和析构函数的好文本介绍。考虑使 LivingObject 类不可复制。

2)试试这个:

shared_ptr<T> p(new T);
vector<T> v;
v.push_back(p);
...
shared_ptr<T> q = v[0];
q->member_function();

最后的建议是,您需要一本好的 C++ 书籍。另一种很棒的资源是其他用户的在线社区,就像这里的这个社区一样。如果可能的话,尽量减少代码。 LivingObject 有一个示例指针就足够了。祝你好运!

关于c++ - 当使用shared_ptr创建实例时,指针实例变量会发生什么情况?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14365561/

相关文章:

c++ - 如何检索轮廓点 - 使用 opencv 转换为 vector ?

c++ - glFrustum 没有创造透视

c++ - 读取二进制文件,Linux Buffer Cache

c++ - "(new Type [n]) + 1"返回什么?

c - 这个队列实现有什么问题?

c++ - 如何复制列表 vector ?

OpenCV 存储点向量的向量 vector<vector<Point>>

c++ - SetDisplayMode(XRes, YRes, 16 对 32, 0, 0)

c++ - 系统消息未处理异常

c - 在C中强制转换为指针类型时会发生什么情况?