2011-04-19 39 views
0

我对C++的内部工作有一些疑问。我知道的例子,一个类的每个成员函数有一个隐含的隐藏参数,这是该指针(以同样的方式Python做多):C++内部:用这个指针搞乱

class Foo 
{ 
    Foo(const Foo& other); 
}; 

// ... is actually... 

class Foo 
{ 
    Foo(Foo* this, const Foo& other); 
}; 

是不是我的错到再承担那么函数的有效性不直接取决于这个的有效性(因为它只是另一个参数)?我的意思是,当然,如果你试图访问这个指针的成员,最好是有效的,但是如果这个被删除,函数将会继续,对吧?

例如,如果我搞砸了这个指针,并且做了类似你在下面看到的内容呢?这是未定义的行为,还是由高度沮丧的定义? (我问出的纯好奇心。)

Foo:Foo(const Foo& other) 
{ 
    delete this; 
    this = &other; 
} 

回答

2

您不能分配到this - 这是Foo * const类型。您在某些情况下可以可以delete this;,但它不是一个好主意。

+0

如果我抛弃了常量,该怎么办? – 2011-04-19 10:12:17

+0

未定义的行为。 – Erik 2011-04-19 10:12:29

+0

我确定它没有在标准中明确定义,但它的定义没有暗示吗?抛弃常量被定义,从纯粹的技术观点来看'this'只是另一个参数,删除和分配指针显然是被定义的......那里没有定义什么? – 2011-04-19 10:15:27

1

this被定义为,

Foo(Foo* const this, ...); 

铸造掉const岬不是this(特殊情况)可能的。编译器会给出相同的错误。我问过similar question