Я прочитал некоторые примеры кода в книге C++ Primer:Прямая инициализация указателя
Я не понимаю, как прямая инициализация указателя работает в ps(new std::string(s))
и ps(new std::string(*p.ps))
. Если ps
является указателем на строку, то почему это нормально, чтобы поместить строку в качестве параметра внутри своего прямого конструктора инициализации?
class HasPtr {
public:
HasPtr(const std::string &s = std::string()):
ps(new std::string(s)), i(0) { }
// each HasPtr has its own copy of the string to which ps points
HasPtr(const HasPtr &p):
ps(new std::string(*p.ps)), i(p.i) { }
HasPtr& operator=(const HasPtr &);
~HasPtr() { delete ps; }
private:
std::string *ps;
int i;
};
«Параметр» - это указатель, а не строка. – chris
Я не знаю контекста этого примера в вашей книге, но помните, что в общем коде вы не должны видеть 'new std :: string', вместо этого просто используйте строку напрямую. –