我正在学习C ++中OOP的各种细节,并编写了该代码。该代码的目的是玩弄ctor初始化程序,并学习如何对作为类属性的引用进行惯性化。
#include <string>
#include <iostream>
using namespace std;
class Corgi {
private:
const string nickname;
const string& rNickname;
public:
Corgi(const string& _nickname): nickname(nickname), rNickname(nickname) {}
};
int main() {
Corgi buddy("buddy");
return 0;
}
此代码编译,但是运行时出现此错误消息:
Project(1343,0x7fff7b2f2000) malloc: *** mach_vm_map(size=140734714511360) failed (error code=3)
*** error: can't allocate region
*** set a breakpoint in malloc_error_break to debug
terminate called after throwing an instance of 'std::bad_alloc'
what(): std::bad_alloc
我不明白为什么会收到此错误消息以及如何解决该错误消息。那么,为什么我要得到它以及如何解决呢?
感谢您的帮助。
Corgi(const string& _nickname): nickname(nickname), rNickname(nickname) {}
使用成员自身初始化成员nickname
,这是一个问题,因为成员nickname
此时尚未初始化。
修正:
Corgi(const string& _nickname): nickname(_nickname), rNickname(nickname) {}
我也考虑过这个:
Corgi(const string& nickname): nickname(nickname), rNickname(nickname) {}
这将适用于Corgi::nickname
的适当初始化(由于范围规则),但是它为Corgi::rNickname
引入了新问题(现在已通过引用构造函数参数对其进行了初始化。
在这种情况下,正确的是:
Corgi(const string& nickname): nickname(nickname), rNickname(this->nickname) {}