错误:创建对象后无法分配区域

Error: can't allocate region after creating an object

本文关键字:分配 区域 创建对象 错误      更新时间:2023-10-16

我正在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) {}

科里鲁的现场演示