C++ C++;按引用传递局部变量
我是c的新手++ 我有以下课程:C++ C++;按引用传递局部变量,c++,pass-by-reference,C++,Pass By Reference,我是c的新手++ 我有以下课程: class User { public: User(const string& username) { m_username = username; } string username() const { return m_username; } void setUsername(const string &username) { m_username
class User
{
public:
User(const string& username) {
m_username = username;
}
string username() const {
return m_username;
}
void setUsername(const string &username) {
m_username = username;
}
private:
string m_username;
};
下面是main.cpp代码
User *createUser() {
string username = "someUser";
User *u = new User(username);
return u;
}
int main(int argc, char *argv[])
{
User *u2 = createUser();
cout << u2->username() << endl;
return 0;
}
User*createUser(){
字符串username=“someUser”;
User*u=新用户(用户名);
返回u;
}
int main(int argc,char*argv[])
{
User*u2=createUser();
cout用户名()
当函数结束时,变量username超出范围,因此
应删除类用户的m_username成员的值
这是不对的。我没有看到您的用户构造函数的实现,但我想它只是复制了给定字符串。m_username
没有进一步链接到您的局部变量,它是自己的实例。createUser
中的username
局部变量超出范围并被删除
User
实例中的m_username
成员变量是一个完全独立的变量,此时不会删除它,因为没有理由删除它
这与是否通过引用将其传递给构造函数无关
您可能会想到一种类似但不同的情况-如果m_username
是对局部变量的引用(而不是完全无关的变量),您可能会遇到以下问题:
class User
{
public:
User(const string& username)
: m_username(username)
{
}
string username() const {
return m_username; // <---- Undefined behaviour HERE
// where the variable that m_username refers to is accessed,
// but that variable's already been destroyed.
}
private:
const string &m_username; // <---- now a reference
};
Here is main.cpp code
User *createUser() {
string username = "someUser";
User *u = new User(username);
return u;
}
int main(int argc, char *argv[])
{
User *u2 = createUser();
cout << u2->username() << endl;
return 0;
}
类用户
{
公众:
用户(常量字符串和用户名)
:m_用户名(用户名)
{
}
字符串username()常量{
返回m_username;//在createUser
中的username
局部变量超出范围并被删除。User
实例中的m_username
成员变量是一个完全独立的变量。username变量通过引用传递,然后在分配给m_username时复制,对吗?@moreo这是正确的ct。(当然,在你的代码中,不是这个答案中m_用户名作为参考的代码)