【发布时间】:2013-04-01 16:03:44
【问题描述】:
C++ 对象的内存可以在编译时分配(在堆栈上)。
MyClass mc;
或动态(常用方法)
MyClass *mc = new MyClass();
是否有任何方法内置于 C++ 语言中,可以区分对象是以静态方式还是动态方式分配的?内置我的意思是使用模板或关键字等(非编程/算法方法)。
本质上,目标是“标记”未使用new 运算符分配的对象(动态分配)。
【问题讨论】:
-
在编译时不会分配任何东西,除非你算上一些
constexpr的东西。 -
重要提示:类未分配; 类的实例(又名对象)是。
-
您是在问如何识别是否在堆上分配了某些东西?您可以通过
operator new的重载来实现 -
@StoryTeller: 不是真的,如果它是一个更大对象的一部分,或者如果它不是直接用 new 分配的(比如调用到
::operator new,然后是新位置——听起来很尴尬?想想std::make_shared)
标签: c++ memory-management