我有一个类X
和方法addX()
,它在堆上分配X
的对象。我想限制客户端代码直接分配X
的对象(以便不允许X *ptr = new X
)。
我已宣布new
,new[]
运营商为私有,但由于我通过X's objects
分配addX()
,我需要定义它们(运营商)。那么,他们的定义应该是什么样的呢?
答案 0 :(得分:1)
这很简单。
#include <iostream>
#include <new>
class X {
public:
static void addX()
{
X* p1 = new X;
delete p1;
}
private:
void* operator new(std::size_t sz)
{
std::cout << "custom new for size " << sz << '\n';
return ::operator new(sz);
}
void* operator new[](std::size_t sz)
{
return ::operator new(sz);
}
};
int main()
{
X::addX();
}
答案 1 :(得分:1)
隐藏构造函数,使用工厂函数:
class A
{
public:
static A* create() { return new A; }
static void destroy(A* a) { delete a; }
protected:
A() {}
A(const A&) {}
A& operator=(const A&) {}
};