• 4854阅读
  • 4回复

关于私有构造函数的问题! [复制链接]

上一主题 下一主题
离线wuleeemail
 

只看楼主 倒序阅读 楼主  发表于: 2011-09-17
下面的代码是Qt Creator中的一段源代码,没有看懂,现在贴出来希望C++高手指点一下!先谢了!
namespace Core {
// FIXME: The intention is to use this class instead of the
// generic QString to identify actions.
class CORE_EXPORT Id
{
public:    
   Id() {}    
   Id(const char *name) : m_name(QLatin1String(name)) {}    
   Id(const QString &name) : m_name(name) {}  
   operator QString() const { return m_name; }  
    QString name() const { return m_name; }  
   bool isValid() const { return !m_name.isEmpty(); }    
  bool operator==(const Id &id) const { return m_name == id.m_name; }    
  bool operator!=(const Id &id) const { return m_name != id.m_name; }
private:  
Id(const QLatin1String &);  //这个构造函数如何使用?    
QString m_name;
};
离线wuleeemail

只看该作者 1楼 发表于: 2011-09-17
这个Id类中定义了三个公有的构造函数和一个私有构造函数。当然不是私有构造函数不能使用,只是按照私有构造函数的使用原则来看好像找不到可以使用它的条件,那么这里设置一个私有构造函数干啥?在源代码这句话的前面有个注解:Intentionally unimplemented。意思是不是说就是故意不生效的。那么源代码作者到底想说明些什么?
离线wuleeemail

只看该作者 2楼 发表于: 2012-01-16
通过对c++的认识,现在大概知道软件作者的意图了。
他这样的写法目地就是:“他自己不想去编写这类构造函数,也不允许别人使用编译器生成这样的拷贝构造函数”。因此这行代码的说明是:Intentionally unimplemented。作者这里是禁用了可能出现的一种构造函数模式,保障了软件的安全性。

离线tanklei

只看该作者 3楼 发表于: 2012-02-14
回 2楼(wuleeemail) 的帖子
那你能不能详细介绍下上下文。

如何禁止别人编写这种函数呢?

  
离线dxfans

只看该作者 4楼 发表于: 2012-02-14
回 2楼(wuleeemail) 的帖子
他自己不想去编写这类构造函数,也不允许别人使用编译器生成这样的拷贝构造函数”????

根本就不是拷贝构造函数。。。

快速回复
限100 字节
 
上一个 下一个