C++ 指针成员初始化

标签 c++ object pointers scope new-operator

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

有人告诉我,只要类包含指针作为成员,我就应该为其分配内存。 (然后在析构函数中使用“delete”来释放空间)

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;
    }
...
}

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

这行得通吗?

最佳答案

调用此构造函数后

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

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

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

关于C++ 指针成员初始化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70506714/

相关文章:

c++ - 输入/输出管道

c++ - Cygwin: g++ 5.2: ‘to_string’ 不是 ‘std’ 的成员

c++ - C++中的数据库访问

c++ - 如何编写模板将 vector 转换为 Json::Value (jsoncpp)

java - 尝试添加到数组但不起作用 - Java

javascript - JQuery $.extend 可以与索引一起使用吗?

java - 使用java将对象发送到本地主机服务器?

在C中更改指针字符串数组中的值

C# 不安全的代码翻译?

c - 使用尾指针删除单链表的最后一个节点