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
将被销毁
因此取消引用此类指针将导致未定义的行为。
我知道这很基础,但鉴于我对 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
将被销毁
因此取消引用此类指针将导致未定义的行为。