我上了这堂课
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.
new返回指向对象的指针,而不是对象.Person*而不是Person.实际上,既然你把它标记为C++ 14,你不应该使用动态分配的原始指针.
只需创建具有自动存储持续时间的变量:
Person newPerson(name, email, city);
Run Code Online (Sandbox Code Playgroud)
或者,如果您需要指针,请使用std::unique_ptr或std::shared_ptr为您处理内存管理:
#include <memory>
auto ptr = std::make_unique<Person>(name, email, city);
Run Code Online (Sandbox Code Playgroud)