在C++的class类中,要分配一块大的内存,该如何操作?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在C++的class类中,要分配一块大的内存,该如何操作?相关的知识,希望对你有一定的参考价值。

使用new操作符时,
在class类中,是这样定义的:BYTE *middle_buffer=new BYTE【1024*1024*3*3】;
出现图片上的错误,求大神帮忙看下

lcyasdlcy的回答是正确的。
一般类的声明放在.h中,类的实现放在.cpp中。

什么是变量的声明,什么是变量的定义?
变量声明:int a; // 此时不分配内存
变量定义:int a = 20; // 此时分配内存

一般C++类中头文件是声明一个变量,CPP中去初始化这个变量。
-------------------------------.h文件------------------------------------
class A

private:
BYTE* middle_buffer;


-----------------------------.cpp文件-----------------------------------
class A

A()

middle_buffer = new BYTE[1024*1024*3*3] ;



正常是这样用的。
还有一种就是静态变量,这个变量是可以直接初始化的,
class A

private:
static BYTE* middle_buffer = new BYTE[1024*1024*3*3] ;

一般标准做法还是在头文件中声明,在CPP中定义。
-------------------------------.h文件------------------------------------
class A

private:
static BYTE* middle_buffer;


-----------------------------.cpp文件-----------------------------------
BYTE* middle_buffer = new BYTE[1024*1024*3*3] ;
class A

追问

你回答的很详细,谢谢了~~也谢谢上面其他各位,你们的回答都很正确。
我想问下,对于大的数组你一般是怎么处理的?就上面的middle_buffer【1024*1024*3*3】,如果我在class类中定义数组如:BYTE middle_buffer[1024*1024*3*3];时,编译是可以通过的,但是链接时就会出错的,应该是由于栈上的内存不够分配引起的~你要是遇到的话,会怎么解决?求教

参考技术A ... 大哥,你见过谁这么用的?
在类里面定义一个BYTE* middle_buffer的变量。
然后在构造函数里面 middle_buffer = new BYTE[1024*1024*3*3] ;
参考技术B 类成员是不允许在定义的时候初始化的,除非是静态常量整形成员如::static const int i=0; 参考技术C lcyasdlcy 有道理,分配大的内存你可以声明一个大的数组,再不然你就用动态链表之类的,得看你的操作类型

以上是关于在C++的class类中,要分配一块大的内存,该如何操作?的主要内容,如果未能解决你的问题,请参考以下文章

小白学习C++ 教程十一C++类中访问修饰符

c++中用new给未知大小的数组分配空间怎么弄?

常用概念比较

类内的动态内存分配

C++内存管理

(十一)golang 内存分析