如何编写C++中的两个类 一个只能在栈中分配空间 一个只能在堆中分配?

发布于 2022-10-15 09:23:44 字数 2 浏览 31 评论 0

RT

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(9

如何视而不见 2022-10-22 09:23:44

莫非,要重载他们的new函数?

我弱智,不懂。

画离情绘悲伤 2022-10-22 09:23:44

这个没法控制吧

幼儿园老大 2022-10-22 09:23:44

这个没法控制吧
hellioncu 发表于 2011-04-16 18:42

   
我觉得这个完全可以嘛! 就是重载new运算符! 我正在写简单的例子。

笑,眼淚并存 2022-10-22 09:23:44

是要重载new,可以限制用new在堆上分配阿。

岁月静好 2022-10-22 09:23:44

好像连重载都不需要,默认情况下,你new的时候就是在堆上申请吧。

限制在栈上申请的话,就用这种方法。
#include <new>

unsigned char buff[1024];
X *ptr = new(buff) X;

下面是示例代码

  1. #include <iostream>
  2. #include <new>
  3. #include <stdio.h>
  4. #include <string.h>
  5. using namespace std;
  6. class MyClass
  7. {
  8.     public:
  9.         int a;
  10.         int b;
  11.         MyClass()
  12.         {   
  13.    
  14.         }   
  15. };
  16. int main(void)
  17. {
  18.     unsigned char buff[1024];
  19.     memset(&buff[0], 0, sizeof(buff));
  20.     MyClass *mc = new(buff) MyClass();
  21.     mc->a = 0xaabbccdd;
  22.     mc->b = 0x11223344;
  23.     for(int i = 0; i < 10; i++)
  24.     {   
  25.         printf("%d: %#x\n", i, buff[i]);
  26.     }   
  27.     return 0;
  28. }

复制代码

柒七 2022-10-22 09:23:44

回复 6# nuying117

    你这是限制栈上申请的?

明媚如初 2022-10-22 09:23:44

回复  nuying117

    你这是限制栈上申请的?
rubylc_unix 发表于 2011-04-16 19:11

那您觉得呢? 只是一个例子而已。 你真正想要达到啥效果?

风苍溪 2022-10-22 09:23:44

禁止栈上分配, 可将析构函数私有。

automatic duration与static duration的对象都需要访问析构函数。
若析构函数私有, 会产生编译错误。

不过 delete 也不能用了, 因为它也需要访问析构函数。
需要另外提供:
void release(T const* p) { destroy(p); operator delete(p); }

禁止堆上分配, 可将 T:: operator new 全部私有。

为什么要这样做呢?  仅仅是为了好玩? 还是有什么实际需求必须这样?

累赘 2022-10-22 09:23:44

回复 9# OwnWaterloo

    面试的题目!!!

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文