我正在C++学习OOP的各种细节,并编写了该代码。该代码的目的是玩弄 ctor-initializer,并学习如何初始化作为类属性的引用。
#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) {}
科里鲁的现场演示