-
实现只能在栈上生成对象的类
方法一:将operator new()设为私有
class A
{
private :
void * operator new ( size_t t){} // 注意函数的第一个参数和返回值都是固定的
void operator delete ( void * ptr){} // 重载了new就需要重载delete
public :
A(){}
~A(){}
};
方法二:将new声明为静态成员函数
class A
{
public:
//提供接口
static A GetObject(int a)
{
return A(a);
}
protected:
//构造函数设置为保护
A(int a)
{
_a = a;
}
private:
int _a;
};
void test()
{
A &a=A::GetObject(3);
}
-
实现只能在堆上生成对象的类
方法一:将构造函数设为私有,将new操作符封装在类的公有函数中
class B { public: static B* GetObj() { return new B; } private: B() {} B(const B&); }; int main() { B* ht3 = B::GetObj(); // 堆 //B ht4(*ht3);拷贝构造,防止出现栈对象 return 0; }
方法二:将析构函数设为私有+将delete封装在类的公有成员函数中
class A
{ public :
A(){}
void destory()
{ delete this ;
}
private :
~A(){}
};