构造函数中的C++引用

Mil*_*lan 2 c++ constructor reference

我有一个类,其构造函数对字符串进行const引用.此字符串充当对象的名称,因此在类的实例的整个生命周期中都需要此字符串.

现在想象一下如何使用这个类:

class myclass {
public:
    myclass(const std::string& _name) : name(_name) {}
private:
    std::string name;
};

myclass* proc() {
    std::string str("hello");
    myclass* instance = new myclass(str);
    //...
    return instance;
}

int main() {
    myclass* inst = proc();
    //...
    delete inst;
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

由于proc()中的字符串是在堆栈上创建的,因此在proc()完成时被删除,在类实例中引用它会发生什么?我的猜测是它变得无效.我最好在课堂上保留一份副本吗?我只是想避免任何不必要的复制像字符串这样的潜在大对象......

aJ.*_*aJ. 8

是的,参考在您的情况下变得无效.由于您使用的是字符串,因此最好在myclass类中保留字符串对象的副本.