Передача по ссылке, сохранение по значению, включая заголовок:
#include <string>
class Profiler {
private:
std::string description;
//snip
public:
//snip
void startJob(const std::string &desc);
};
void Profiler::startJob(const string &desc) {
//snip
description = desc;
}
Хранение по значению - ок. до тех пор, пока вы не измените исходную строку. Если вы этого не сделаете, они будут совместно использовать память и не будет неэффективного копирования. Тем не менее, в этом случае вы получите символы, скопированные в буфер, управляемый std :: string.
Я не думаю, что можно хранить указатель на литерал-символ * как экземпляр std :: string, хотя это будет o.k. хранить указатель char *.