可悲的是你不能.斯科特迈耶的其中一本书中有一个完整的部分,他继续讨论试图实现这一目标的挑战,但缺点是它是不可能的.
更有效的C++ - 第27项:要求或禁止基于堆的对象.
好的,这是容易证明的问题之一(有问题的项目有几页,所以我不会总结所有内容,但这里至少有一个挑战):
许多(但不是全部)系统以下列方式排列内存:
----------------
| Stack |
| (Grows Down) |
| |
----------------
| |
| |
| |
| |
| |
| |
----------------
| Heap |
| (Grows Up) |
| |
----------------
Run Code Online (Sandbox Code Playgroud)
现在你可能会想到这样的内存安排,你可以通过operator new/new运算符做一些聪明的事情来判断你是在堆上还是不正确(通过检查你是在某个内存位置之上还是之下)?这是问题所在.静态对象的位置取决于系统,因此可能发生以下情况:
----------------
| Stack |
| (Grows Down) |
| |
----------------
| |
| |
| |
| |
| |
| |
----------------
| Heap |
| (Grows Up) |
| |
----------------
| Static |
| Objects |
----------------
Run Code Online (Sandbox Code Playgroud)
您现在无法区分静态对象和堆对象.哎呀!另外你可能已经注意到我说这是系统相关的,这意味着即使你想出一种方法来区分它们,你的代码也不会是可移植的.
| 归档时间: |
|
| 查看次数: |
2703 次 |
| 最近记录: |