构造函数使指针类型的对象

Tib*_*doš 0 c++

我上了这堂课

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;
};
Run Code Online (Sandbox Code Playgroud)

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

const Person& newPerson = (const Person &) new Person(name, email, city);
Run Code Online (Sandbox Code Playgroud)

我收到这个错误

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

我想为什么新创建的Person是Person*而不仅仅是Person.

Som*_*ken 9

new返回指向对象的指针,而不是对象.Person*而不是Person.实际上,既然你把它标记为C++ 14,你不应该使用动态分配的原始指针.

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

Person newPerson(name, email, city);
Run Code Online (Sandbox Code Playgroud)

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

#include <memory>
auto ptr = std::make_unique<Person>(name, email, city);
Run Code Online (Sandbox Code Playgroud)