【发布时间】:2011-01-21 08:06:19
【问题描述】:
以下代码适用于 Visual C++ 2008。但是,当涉及到 Visual C++ 6 时,我收到以下错误。我可以知道为什么,以及如何修复错误,但仍使析构函数保持私有状态。
class X
{
public:
static X& instance()
{
static X database;
return database;
}
private:
X() {} // Private constructor
~X() {} // Private destructor
X(const X&); // Prevent copy-construction
X& operator=(const X&); // Prevent assignment
};
int main()
{
X::instance();
}
C:\Projects\ttt6\main.cpp(178):错误 C2248:“X::~X”:无法访问在类“X”中声明的私有成员 C:\Projects\ttt6\main.cpp(175) :参见 'X::~X' 的声明
【问题讨论】:
-
构造函数/析构函数不应该总是公开的吗?
-
@Aviator:构造函数不应该总是公开的。示例:对于抽象类,您只希望派生类调用构造函数(这就是您可以防止抽象类实例化的方法),因此您将其设为
protected。对于单例,您只需要类的静态CreateInstance()方法来创建实例,因此您可以创建构造函数private。 -
@Scott:非常感谢。我现在明白了。
-
此代码在 VC9 上也会出错。我不敢相信它可以在任何编译器上编译。
-
VC2008 是 VC9。有VC6 == VC98, VC7 == VC2002, VC7.1 == VC2003, VC8 = VC2005, VC9 == VC2008, VC10 = VC2010。
标签: c++