C++指针成员初始化

C++ pointer member initialization

我知道这很基础,但鉴于我对 C++ 的使用非常有限,我不知道答案。

我被告知每当 class 包含一个指针作为成员时,我应该为它分配内存。 (然后在析构函数中使用 'delete' 来释放 space)

class Person{
    public:
    string* ptr_name;
    Person(string& name){
        ptr_name = new string(name);
    }
...
}

我在想我是否可以这样做

class Person{
    public:
    string* ptr_name;
    Person(string name){
        ptr_name = &name;
    }
...
}

因为我没有在构造函数参数中使用“&”,所以 'name' 是按构造函数中的值复制的。所以已经为它分配了内存。显式析构函数将是不必要的,因为指针将在堆栈上自动销毁。

这行得通吗?

调用此构造函数后

Person(string name){
    ptr_name = &name;
}

指针ptr_name将无效,因为局部变量name将被销毁

因此取消引用此类指针将导致未定义的行为。