如何防止简单C++;类对象,同时允许动态实例 我知道如何防止C++中类的动态实例化。(定义我自己的“new”操作符)但是有没有一种简单的方法来防止静态实例化,从而强制执行动态实例?也就是说,我该怎么做。。。(这不是一个可派生的抽象基类,只是一个简单的类)
您可以通过将c'tor设置为私有来防止它:如何防止简单C++;类对象,同时允许动态实例 我知道如何防止C++中类的动态实例化。(定义我自己的“new”操作符)但是有没有一种简单的方法来防止静态实例化,从而强制执行动态实例?也就是说,我该怎么做。。。(这不是一个可派生的抽象基类,只是一个简单的类),c++,C++,您可以通过将c'tor设置为私有来防止它: class B { B() {} public: static B* alloc() { return new B; } }; 而不是b=新的b您将执行:b=b::alloc() 您可以通过将c'tor设置为私有:类B{。。。 };代替b=新b您将执行:b=b::alloc() 但这只是事实的一半,对吗?我仍然可以做一个 static B*B=B::alloc() 生成一个指向静态(即在执行main()之前创建的)对象的指针-即这或多或少是一个
class B {
B() {}
public:
static B* alloc() { return new B; }
};
而不是b=新的b代码>您将执行:b=b::alloc()代码>
您可以通过将c'tor设置为私有:
类B{。。。
};代码>
代替b=新b代码>您将执行:b=b::alloc()代码>
但这只是事实的一半,对吗?我仍然可以做一个
static B*B=B::alloc()代码>
生成一个指向静态(即在执行main()之前创建的)对象的指针-即这或多或少是一个静态对象,它只位于堆上。有什么方法可以防止这种情况发生吗?为什么要防止这种情况发生?我想你的意思是b=b::alloc()如果有人付出了所有的努力,我相信他们知道自己在做什么,并且有很好的理由这么做。
class B {
B() {}
public:
static B* alloc() { return new B; }
};