Сбой при доступе к ссылке на строку - PullRequest
0 голосов
/ 01 августа 2011

Этот код вылетает на линии cout. Кто-нибудь может объяснить, почему это не работает?

#include <iostream>
#include <string>

using namespace std;

class myclass {
   const string& m_str;

public:
   myclass(string s) : m_str(s) {}
   const string& getString() const { return m_str; }
};

int main () {
   const string str("honey");
   myclass mc(str);
   cout << mc.getString() << "\n";
   return 0;
}

1 Ответ

5 голосов
/ 01 августа 2011

конструктор myclass принимает строку по значению, что делает ее временной.Затем вы привязываете это временное значение к члену m_str.При выходе из конструктора ссылка на член становится недействительной.Вместо этого: myclass(const string& s) : m_str(s) {}

Даже если это не очень хорошая идея.Вообще говоря, использование ссылок в качестве членов может быть опасным, потому что вы должны очень четко понимать семантику жизни.Вам следует подумать о том, чтобы просто хранить строку по значению в вашем классе, если у вас нет особых причин не делать этого.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...