1. 只在堆上申请
class A
{
protected:
A(){}
~A(){}
public:
static A* create()
{
return new A();
}
void destory()
{
delete this;
}
};构造函数和析构函数为protected,则不能直接在栈上调用其进行构造与析构。另外,protected可以允许继承后子类继续实现只在堆上申请对象;
2.只在栈上申请
class A
{
private:
void* operator new(size_t t){} // 注意函数的第一个参数和返回值都是固定的
void operator delete(void* ptr){} // 重载了new就需要重载delete
public:
A(){}
~A(){}
};
本文介绍了两种不同的内存管理方式:一种是通过保护构造及析构函数仅在堆上创建对象;另一种是重载new/delete运算符确保对象仅在栈上分配。这两种方式有效地控制了对象的生命周期和内存分配位置。
692

被折叠的 条评论
为什么被折叠?



