如何防止简单C++;类对象,同时允许动态实例 我知道如何防止C++中类的动态实例化。(定义我自己的“new”操作符)但是有没有一种简单的方法来防止静态实例化,从而强制执行动态实例?也就是说,我该怎么做。。。(这不是一个可派生的抽象基类,只是一个简单的类)

如何防止简单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()之前创建的)对象的指针-即这或多或少是一个

您可以通过将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()之前创建的)对象的指针-即这或多或少是一个静态对象,它只位于堆上。有什么方法可以防止这种情况发生吗?

为什么要防止这种情况发生?我想你的意思是
b=b::alloc()class B {
B() {}

public:
  static B* alloc() { return new B; }
};