return shared_ptr or Handle ?

Started by
0 comments, last by L. Spiro 10 years ago

Hi

I am refactoring and the Asset Manager has a std::map of all the game resources. But I can't quite think of how I should encapsulate things.

An entity manager can for example use the asset manager and call GetResource...(ID) and use it. But should GetResource() return a HANDLE with a shared_ptr inside it, or can I just return the shared_ptr?

It seems if I use handles I just put another layer on the cake but it does not do anything.

Any tips?


struct GameAssets
{
	std::vector<std::shared_ptr<Mesh> > Meshes;
	std::vector<std::shared_ptr<Texture> > Textures;
	std::vector<std::shared_ptr<Animation> > AnimationTracks;
	std::vector<std::shared_ptr<Skeleton> > Skeletons;
};

struct HandleAssets
{
	std::shared_ptr<GameAssets> Assets;
};

class AssetManager
{
public:
	AssetManager();
	~AssetManager();

	HandleAssets GetResourceByHandle(DWORD ID);
	std::shared_ptr<GameAssets> GetResourceBysptr(DWORD ID);

private:
	std::map<DWORD, HandleAssets > AllAssetsByHandle;
	std::map<DWORD, std::shared_ptr<GameAssets> > AllAssetsBysptr;
};
Advertisement
I am about to head out so I can only give a short answer, but you are correct that the extra layer on the cake is needless.
Just return a shared pointer and be alert as to how to and not to use them (as in passing them as references, not copies, to functions, etc.)


L. Spiro

I restore Nintendo 64 video-game OST’s into HD! https://www.youtube.com/channel/UCCtX_wedtZ5BoyQBXEhnVZw/playlists?view=1&sort=lad&flow=grid

This topic is closed to new replies.

Advertisement