构造函数声明没有实现好的样式以避免实例化?

时间:2012-06-20 10:56:50

标签: constructor implementation instantiation

一个在职的大学创建了一个只有静态方法的类。因为他想避免实例化,所以他添加了一个(私有)构造函数。到目前为止这很好。但是构造函数只是声明并且没有实现。因此,在使用一次时,您将获得“未定义的引用”。

Imho必须足以使构造函数成为私有 - 并且没有实现的声明是丑陋的。你对此有何看法?

2 个答案:

答案 0 :(得分:1)

我看到了你的担忧。

事实上,将复制构造函数设为私有,然后将其保留为未实现,这是一种常见做法,在某些情况下肯定是必要的。这导致了一个众所周知的C ++习语的定义,Non Copyable Mixin赋予它更多的“可见性”。但即使不使用不可复制的mixin并且解决方案在本地应用,IMO也完全可以接受(因为它是一种已知的习语)。

在你的特定情况下,因为据我所知,我们不是在谈论复制构造函数,而是任何构造函数(该类只是一些静态方法的容器而你不希望它被初始化),我认为使用命名空间并在其中声明您的功能将是一个更好的解决方案。

答案 1 :(得分:0)

实际上实例化这样的对象不会造成任何伤害 - 程序行为不会改变。如果你仍然想要禁止实例化,那么是的,你最好不要实现构造函数。如果你有一个空的构造函数,它可能会从类的朋友和类的成员函数中调用。有关详细信息,请参阅this question