Helo,我是C ++编程的新手。 我不了解这些代码行......
SomeClass someClassObject(35);
...
someClassObject = SomeClass(46);
首先,“someClassObject = SomeClass(46)”有什么作用?它是不是SomeClass E.G的指针:“someClassObject = new SomeClass(46)”但是在堆栈上呢?
答案 0 :(得分:2)
此处不涉及指针。 SomeClass(46)
构造一个临时对象,通常在堆栈上。接下来是对变量someClassObject
的赋值。可以通过重载赋值运算符来用户定义此赋值的确切语义。
PS:请注意语句末尾缺少的分号。
答案 1 :(得分:1)
SomeClass(46)
通过调用将数字SomeClass
传递给它的构造函数,在堆栈上构造46
的新实例。
someClassObject =
SomeClass
的某个实例呼叫operator=
上的someClassObject
。
除非构造函数声明为显式,否则它也可以写为:
someClassObject = 46;
请看一下这个例子:http://ideone.com/7kgWob粘贴在下面:
#include <iostream>
using namespace std;
class SomeClass
{
private:
int i = 0;
public:
SomeClass() { cout << "default constructor\n"; };
SomeClass(int val) { i = val; cout << "constructor getting int: " << val << '\n'; };
~SomeClass() { cout << "destrucing object having i: " << i << '\n'; };
SomeClass& operator=(const SomeClass& rhs) {
cout << "operator= getting int: " << rhs.i << '\n';
if (this != &rhs) {
i = rhs.i;
}
return *this;
}
};
int main() {
SomeClass a(10);
SomeClass b = SomeClass(20);
SomeClass c(35);
c = SomeClass(46);
return 0;
}
将输出:
constructor getting int: 10
constructor getting int: 20
constructor getting int: 35
constructor getting int: 46
operator= getting int: 46
destrucing object having i: 46
destrucing object having i: 46
destrucing object having i: 20
destrucing object having i: 10
本质上,它创建一个临时实例,并将当前实例设置为与临时实例相同的值(此时存在两个具有相同值的对象)。然后它释放临时。由于不涉及new
,因此它发生在堆栈上。
答案 2 :(得分:0)
SomeClass* someClassObject = new SomeClass(46);
通过调用带整数的构造函数,将class SomeClass
类型的指针初始化为动态对象。
第二个你调用重载赋值运算符,它调用构造函数,该构造函数接受一个创建临时对象的整数,然后将它分配给someClassObject。
不要忘记;
它不是任意的。