类的封装在内存管理方面是如何得到确保的?

pan2008 2003-08-25 12:53:06
类的封装在内存管理方面是如何得到确保的?
我的意思是
只要得到类的实例的首地址
我不就可以操作该地址后面但又在当前程序地址空间内的所有地址的数据了吗?
...全文
80 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
sandrowjw 2003-09-09
  • 打赏
  • 举报
回复
写错了,
char i = b->dummy[4];//不受保护
b->dummy[3] = 1;//不受保护
sandrowjw 2003-09-09
  • 打赏
  • 举报
回复
com本质论里说到过一个例子,大体写一下
struct B
{
int n;
char dummy[1];
};

void main()
{
B* b = (B*)malloc(sizeof(B) + 5 * sizeof(char));
char i = b.dummy[4];//不受保护
b.dummy[3] = 1;//不受保护
free(b);
}

正如楼上所说,这就不是oo了。在这种情况下你可以封装用户的(增加range_check)访问和类的创建工作,如vector(但是vector为了保证效率还是有没有range_check的[]操作符在)。在java里类似的代码是会抛出一个异常的,而且java里也不能用malloc随便分配空间。
jakeye 2003-09-09
  • 打赏
  • 举报
回复
你给这样一点分数,高手是不屑于进来看的,这样你就失去了很多问题解答的机会。分数固然重要,但问题的解决不是更重要吗?


这话说的好,所以本人每次放的分都是很多的.请高人来关注我的问题吧!!
:)
sam1111 2003-09-09
  • 打赏
  • 举报
回复
你所说的,用汇编当然可以做到,但那已经不是OOP了。C++的封装并不是二进制级别的封装,而只是源码级别的封装,编译器只是保证C++源码不会出现违例的访问而已。

你给这样一点分数,高手是不屑于进来看的,这样你就失去了很多问题解答的机会。分数固然重要,但问题的解决不是更重要吗?
pan2008 2003-09-09
  • 打赏
  • 举报
回复
请高人决定本贴的分数,然后我会请她领分
pan2008 2003-08-28
  • 打赏
  • 举报
回复
高人......
iconoclast 2003-08-28
  • 打赏
  • 举报
回复
穷鬼!到处都是你的烂帖!!鄙视你!!!

64,637

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧