Я пишу игру Cocos2D-X, в которой игрок, враги и другие персонажи хранят свои атрибуты в CCMutableDictionary
, который является своего рода классом-декоратором для std::map
. Доступ к значению в словаре можно получить с помощью метода CCMutableDictionary::objectForKey(const std::string& key)
.
Теперь в заголовочном файле, включенном во многие мои файлы .cpp, у меня есть несколько строк const char * const
для доступа к значениям в словарях, например:
// in Constants.h
const char* const kAttributeX = "x";
const char* const kAttributeY = "y";
// in a .cpp file
CCObject* x = someDictionary->objectForKey(kAttributeX);
Итак, поправьте меня, если я ошибаюсь, но конструктор копирования std::string
вызывается, и временный std::string
находится в стеке каждый раз, когда я вызываю один из выше методы objectForKey
с использованием const char* const
, верно?
Если это так, я считаю, что было бы более эффективно во время выполнения, если бы эти постоянные ключи атрибутов уже были объектами std::string
. Но как мне сделать это правильнымспособом?
Если их определить в файле Constants.h следующим образом, компилируется нормально, но у меня такое чувство, что что-то не так:
// in Constants.h
const std::string kAttributeX = "x";
const std::string kAttributeY = "y";
Приношу свои извинения, если этот вопрос уже задавался. Кажется, я не мог найти точный ответ, который искал здесь, в StackOverflow.