gpt4 book ai didi

c++ - 指针类型对象的构造函数

转载 作者:太空宇宙 更新时间:2023-11-04 14:43:24 25 4
gpt4 key购买 nike

我做了这门课

class Person {

public:

Person(const std::string& name, const std::string& email, const std::string& city)
: name(name), email(email), city(city) {
}

bool hasCity() const {
return city.compare("") == 0;
}

void print() const {
std::cout << name + " <" + email + ">";
if(hasCity()){
std::cout << ", " + city;
}
std::cout << std::endl;
}

bool equalTo(const Person& comparedPerson) const {
return email.compare(comparedPerson.email) != 0;
}

bool equalId(std::string comparedId){
return email.compare(comparedId) != 0;
}

const std::string name;
const std::string email;
const std::string city;
};

对我来说有问题的是,当我尝试创建新的 Person 时:

const Person& newPerson = (const Person &) new Person(name, email, city);

我收到这个错误

error: invalid cast of an rvalue expression of type 'Person*' to type 'const Person&'
const Person& newPerson = (const Person &) new Person(name, email, city);

我想知道为什么新创建的 Person 是 Person* 而不仅仅是 Person。

最佳答案

new 返回指向对象的指针,而不是对象。 Person* 而不是 Person。不过,实际上,由于您将其标记为 C++14,因此您不应该使用带有动态分配的原始指针。

只需创建一个具有自动存储持续时间的变量:

Person newPerson(name, email, city);

或者,如果您需要一个指针,请使用为您处理内存管理的std::unique_ptrstd::shared_ptr:

#include <memory>
auto ptr = std::make_unique<Person>(name, email, city);

关于c++ - 指针类型对象的构造函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39957313/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com