小编Ovi*_*scu的帖子

C ++重载[] []列表

class Matrix和一个成员在一起std::list<Element> listMatrix;Element是一个有3 int名成员的班级line, column, value。我通过保存行,列和相应元素的值在列表中保存不为0的矩阵元素。我想超载,operator [][]所以我可以做类似的事情Matrix a; a[2][3] = 5;。我知道你不能overload [][]直接。

c++ list operator-overloading

5
推荐指数
1
解决办法
114
查看次数

警告:变量未初始化

我有以下代码:

class circularList
{
public:
    circularList() : data(0), next(this) {}
public:
    int data;
    circularList* next;
};

int main()
{
    circularList* root = new circularList;
}
Run Code Online (Sandbox Code Playgroud)

我不断收到警告,说变量circularList* next未初始化,但是我可以查看是否运行了使用指针地址初始化的代码root

c++ variables initialization

5
推荐指数
1
解决办法
110
查看次数

自定义分配器,包括放置新案例

我正在尝试为 C++ 实现一个自定义分配器,该分配器适用于任何形式的 new/delete/malloc/free。

我的程序如何工作,我在程序开始时分配 x 字节的内存池并使用它们。例如,当有人编写int* a= new int;我的程序时,将从可用的内存池中返回地址并将其标记为已分配,并且该地址以及分配的大小将从内存池中删除。当有人写入时,delete a;该地址将返回到内存池并可以再次使用。

我的问题是我不完全理解如何new(placement)工作以及应该如何处理它,因为当调用我的函数在 new/malloc 上分配内存时,我只有程序所需的内存大小作为参数,而我只是返回要使用的内存的可用地址。考虑下面的例子

auto p = (std::string*)malloc(5 * sizeof(std::string));
void * placement = p;
new(placement) std::string(4, (char)('a'));
std::cout<< *p;
Run Code Online (Sandbox Code Playgroud)

在第一行,我的自定义分配器将返回 p 来自我的内存池的地址,其中总共有 可用内存5* sizeof(std::string)),在第三行,我的自定义分配器将再次分配返回另一个地址的内存。当我打印时*p,它打印的正是我所期望的aaaa

这是它应该如何运作的吗?

c++ memory-management allocation new-operator

4
推荐指数
1
解决办法
4897
查看次数