いいえ、 の各インスタンスにGameObject
は、 の独自の (初期化されていない) インスタンスがありid
ます。のすべてのインスタンスで使用できる共有のインクリメントid
インスタンスが必要ですGameObject
。これを達成するためのメカニズムの 1 つは、static
クラス変数を使用することです。static
スレッドが関係している場合は、変数へのアクセスを同期する必要があります。
class GameObject
{
protected:
static int id;
};
int GameObject::id; // defaults to zero and should be added to
// exactly one .cpp file only.
GameObject::GameObject() : instances(GameObject::id++) {}
別の代替手段は、次を使用することboost::uuid
です。
#include <string>
using std::string;
#include <boost/lexical_cast.hpp>
#include <boost/uuid/uuid.hpp>
#include <boost/uuid/uuid_generators.hpp>
#include <boost/uuid/uuid_io.hpp>
using boost::lexical_cast;
using boost::uuids::uuid;
using boost::uuids::random_generator;
class GameObject
{
public:
string instances;
GameObject() : instances(make_uuid_());
void Display();
private:
string make_uuid_()
{
return lexical_cast<string>((random_generator())());
}
};