如何定义定义一个只能在栈上生成对象的类???
这种题主要考的是对C++语法的理解,以及对C++语法的运用。
分析:
对象可以在栈上生成也可以由我们在堆上new出来。要想只在栈上生成对象而不能在堆上生成对象在类外
是无法完成的,我们必须从类的内部入手。
我们知道类对象的构造是由构造函数完成的,如果我们把构造函数声明为保护的,使得不能在类外调用
构造函数,这样的话就不能在类外new出对象了,但这同时也不能在类外定义对象了。
为此,我们可以在类内生成一个对象并提供一个公有的接口来返回这个对象。接下来如果在类外定义类
对象的话,只需要调用这个函数即可。貌似这样做还是行不通,因为在类外只能由类对象调用类成员函数,这
该怎么办呢???
我们可以将这个接口声明为静态成员函数,这样就可以了。
例:
class AA
{
public:
static AA GetObject(int a)
{
return AA(a);
}
protected:
AA(int a)
{
_a = a;
}
private:
int _a;
};
void test()
{
AA &a=AA::GetObject(10);
}