如何定义一个只能在栈上生成对象的类
2017-11-14 22:27
288 查看
这道题主要考察我们对于C++的语法的理解和运用的程度。
本文主要给出了两种方法实现。
当我们用new操作符时候,才会在堆上生成对象,所以我们需要让它无法使用。
将operator new()设为私有即可。
因此 ,我们可以在类的内部实现一个接口,用接口来返回这个对象,但是又出现了一个问题,那边是只有通过对象我们才能调用类的成员函数。
如果我们把它声明为静态成员函数,那便可以在类外调用成员函数了。
本文主要给出了两种方法实现。
方法一:
分析:
如果我们建立对象只能在栈上生成而不能在堆上生成,那么需要考虑以下几点:当我们用new操作符时候,才会在堆上生成对象,所以我们需要让它无法使用。
将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); }
相关文章推荐
- 如何定义一个只能在堆上生成对象的类
- 如何定义一个只能在栈/堆上生成对象的类
- 如何定义一个只能在堆或者栈上生成的对象
- 如何定义一个只能在栈上生成对象的类
- 如何定义一个只能在堆上(栈上)生成对象的类?
- 第二讲:如何定义一个只能在堆上生成对象的类
- 如何定义一个只能在栈上生成对象的类
- 如何定义一个只能在堆上(栈上)生成对象的类?
- 如何定义一个只能在堆上(栈上)生成对象的类?
- 如何定义一个只能在堆上(栈上)生成对象的类
- 如何定义一个只能在堆上(栈上)生成对象的类
- 如何定义一个只能在堆上(栈上)生成对象的类?
- 如何定义一个只能在堆上(栈上)生成对象的类?
- 如何定义一个只能在堆上生成对象的类
- 如何定义一个只能在堆(栈)上生成对象的类
- 如何定义一个只能在堆上生成对象的类
- 如何定义一个只能在栈上生成对象的类
- 如何定义一个只能在堆上(栈上)生成对象的类?
- 如何定义一个只能在堆上(栈上)生成对象的类?
- 如何定义一个只能在堆(栈)上创建对象的类