Что делать с переменными экземпляра указателя при создании экземпляра с помощью shared_ptr?

Хорошо, вот у меня есть этот маленький пример моего сложного класса

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 где я могу скопировать его позже (текущий метод, который я использую, выдает ошибку: conversion from 'LivingObject*' to non-scalar type 'LivingObject' requested)LivingObject TestObj=new LivingObject;

1a) Что мне делать с такими указателями, как LivingObject::myNode при создании нового объекта, я должен сделать их объектами? или что-то еще не так? (Примечание: я использую Ogre3D, и именно так учебники заставили меня все настроить …)

2) Когда вышеупомянутое решено, как бы я поместил его в вектор shared_ptr и получил доступ к этому конкретному элементу для функций (например, spawnList[15].(or ->)Attack(target);

2

Решение

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 имеет один пример указателя. Удачи!

2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]