原因:如何在堆上和栈上创建类
概况:普通的局部变量声明被创建在栈上,如A a;而通过new进行创建的类对象则被分配到堆上如A *a = new A;
类只在堆上创建,只需要将析构函数设置为private类型即可如下:编译器在为类对象分配空间时会检查析构函数的访问性。
class TeC {
private:
~TeC() {};
public:
void Test() { printf("123\n"); };
};
TeC p;//提示析构函数为私有,不能声明
只能声明到栈上如下:只需要将new进行重写即可,new方法调用构造函数和析构函数。而通过malloc进行创建对象的话则不会调用构造函数和析构函数。
class TeC {
private:
void* operator new(size_t size) {};
void operator delete(void* p) {};
public:
void Test() { printf("123\n"); };
};
总结:通过上面的方式可以实现分别在堆和栈上进行创建类对象。