-
实现只能在栈上生成对象的类
方法一:将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(){}
};
本文介绍两种C++编程技巧,一种是限制类的对象仅能在栈上生成,通过将new操作符设为私有或声明为静态成员函数;另一种是限制对象仅能在堆上生成,通过将构造函数设为私有并将new操作封装在公有函数中,或将析构函数设为私有并封装delete操作。


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



