В следующем коде pName_
был инициализирован внутри тела конструктора, который во время компиляции выдает ошибку как:
error: нет совпадения для вызова '(std :: shared_ptr>) (std :: string ) '*
pName_ (новая строка (имя));
Однако, если я изменю способ его инициализации, инициализируя это с помощью списка инициализаторов, то работает нормально. Почему?
class Person
{
public:
Person(string name) //: pName_(new string(name)){} /*UNCOMMENT THIS*/
{
pName_(new string(name));
}
void printName(){ cout<<endl<<*pName_; }
private:
shared_ptr<string> pName_;
};
int main()
{
vector<Person> persons;
Person p("George");
persons.push_back(p);
return 0;
}