c++中的拷贝构造函数,调用时需要this指针么

如题所述

调用对象的任何函数都会在函数内部产生一个this指针,this指针是个常量指针,由编译器编译时生成。this指针只在对象内部可见,所以调用时你也无法访问this指针,更不需要。

 

this指针用于对象内部的函数访问当前对象的其他成员,同时可起到一定的提高阅读性的作用,当在函数内访问另一个同类对象的成员时可以区分开来,比如拷贝函数中当需要将形参对象的成员复制到本地对象成员时。

 

比如

MyClass(const MyClass & obj) 
{
   this->Value=obj.Value;
}

 

显然使用this->Value 比直接使用Value更直观地表明等号左侧的Value是当前对象的Value。

 

 

另外,顺便提一下,this指针的地址是每个函数开始时通过相对地址计算出来的,而不是传递进来的。

温馨提示:答案为网友推荐,仅供参考
第1个回答  2014-05-23
C++类有复制构造函数。
例如:
class String
{
char* cstring;
int len;
//...
public:
Strting(const String& str);
//...
};
String::String(const String& str)
{
len=str.len;
(this->)cstring=new char[len+1];
strcpy(cstring,str.cstring);
}
定义复制构造函数时,this的使用都是隐含的,不必显式使用this指针。
至于调用复制构造函数,更不需要使用this指针吧。
调用举例:
String s1("goodluck");
String s2(s1); //String s2=s1;追问

哦,那么拷贝构造函数里面有没有隐含的this啊?

追答

有的。复制构造函数用已有的对象来初始化一个新的对象。

虽然 对象没有this指针。但按成员来复制的时候用得上的。

第2个回答  2014-05-23
不需要,拷贝构造函数的this指针使用都是隐含的。
第3个回答  2014-05-23
不需要,默认参数追问

你是指编译器在调用构造函数时默认传递this指针?

追答

是啊

相似回答