什么是“new ClassName(this);”意思?

时间:2014-11-03 14:42:24

标签: c++ qt documentation

例如:

// name.h
Class A {
   private:
          QLabel *statusLabel;
};

// name.cpp
statusLabel = new QLabel(this);

这是构造函数调用吗?我不这么认为,但如果是 - 为了什么? statusLabel 已经是 QLabel-Class 对象。

3 个答案:

答案 0 :(得分:1)

在标题中,您指出A类具有指向QLabel的指针。在cpp文件中,您实际创建了QLabel对象。 “this”是指向创建QLabel的A类对象的指针,指示此对象是QLabel的父对象。但是,A类不是QWidget,因此不应该编译。

答案 1 :(得分:0)

statusLabel = new QLabel(this);

编辑更加精确: -

所以,你正在使用new表达式来分配内存,间接将调用QLabel的构造函数作为参数。

答案 2 :(得分:0)

  

这是构造函数调用吗?

这是一个 new-expression ,用于创建动态对象。它

  • 分配一些内存;
  • 通过调用带有QLabel(指向当前对象的指针)作为参数的构造函数,在该内存中创建一个this对象;
  • 返回指向新对象的指针,您指定给statusLabel
  

statusLabel已经是QLabel - 类对象。

不,*表示它是指针,而不是对象。在将其指定为指向对象(如此行代码所做)之前,它不代表任何对象。分配后,您可以使用它来访问它指向的对象。