A 是一个类, 如何让A* a = new A()编译不过
是在说怎么让A不能创建对象?设计模式?抽象类?? 设计模式 抽象类 一道面试题
[解决办法]
A 是一个类, 如何让A* a = new A()编译不过
这是考智力么? 方法比较多:
A不提供默认构造函数(也就是构造函数都有参数, 编译报错: 没有提供合适的参数来调用构造函数
A有默认构造函数, 但是为protected/protected, 编译报错: 构造函数为私有/保护
给A加上template <typename T>, 编译报错: 没有提供合适的类型参数来实例化
重载void* operator new(size_t size)为private/protected, 编译报错: new 操作符私有/保护
定义一个纯虚的析构函数 virtual pureFunc()=0; 编译报错: 抽象类无法实例化
[解决办法]
让A* a = new A()编译不过
可能是为了实现单件模式
把A的构造函数放到private:
class A
{
private:
A(){}
public:
static A* GetInstance(){static A instance;return &instance;}
}
可以通过A::GetInstance()->
访问这个类