Bob*_*gge 2 c++ memory-management
可以在编译时(在堆栈上)分配C++对象的内存.
MyClass mc;
Run Code Online (Sandbox Code Playgroud)
或动态(常见方法)
MyClass *mc = new MyClass();
Run Code Online (Sandbox Code Playgroud)
有没有什么方法,建成了C++语言,可如果一个对象是在静态或动态地分配一个区别?内置于我的意思是使用模板或关键字等(非编程/算法方法).
本质上,目标是"标记"未使用new运算符分配的对象(动态分配).
不,无法检测对象是静态还是动态分配.至少在大多数人使用这些词的意义上:堆栈与堆.C++标准考虑了三种类型的存储,静态存储(全局变量,类的静态成员,静态局部变量),动态分配和自动存储.
这是第三个使事情变得复杂的事情,因为具有自动存储的对象可能被分配为可能在三个竞技场中的任何一个中分配的较大对象的一部分.例如,考虑一个在堆中分配并由a管理的对象shared_ptr,它可能是直接分配的new,或者它可能是通过创建的make_shared.在第一种情况下,调用new您的类型,但在后者中,动态分配更大的块并且对象构造到位:
std::shared_ptr<T> p = std::make_shared<T>();
std::shared_ptr<T> q( new T() );
Run Code Online (Sandbox Code Playgroud)
现在有趣的一点是,为什么你关心如何创建对象,因为可能有不同的事情可以解决你的实际问题,而不涉及你所要求的.
| 归档时间: |
|
| 查看次数: |
799 次 |
| 最近记录: |