- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
#include <iostream>
using namespace std;
class Class {
public:
explicit Class(int a) : m_int(a) {}
int get() const { return m_int; }
void swapThis(int a) {
delete this;
Class **thisptr = reinterpret_cast<Class**>(&a);
thisptr--;
*thisptr = new Class(a);
cout << "this: " << this << endl
<< "that: " << *thisptr << endl;
}
private:
int m_int;
};
int main() {
Class *s = new Class(13);
s->swapThis(42);
cout << s->get() << endl;
delete s;
return 0;
}
tirinox 29.12.2012 02:38 # +1
bormand 29.12.2012 05:38 # +7
Автор рисковый парень ;)
http://ideone.com/WY9qdS
TarasB 29.12.2012 12:14 # +4
Самый черезжопный способ получения this, я долго втыкал. Школолокулхацкерство как оно есть.
bormand 29.12.2012 14:35 # 0
Ага. Вообще не факт, что он находится в памяти. Мало того, что компилятор имеет право передать this в регистре, так он еще и заинлайнить swapThis может, и никакой передачи вообще не будет...
LispGovno 29.12.2012 17:58 # 0
или на диске в свопе
bormand 29.12.2012 19:06 # 0
LispGovno 29.12.2012 19:50 # 0
Elvenfighter 29.12.2012 21:16 # +5
bormand 29.12.2012 21:32 # +3
Setry 30.12.2012 14:19 # 0
bormand 30.12.2012 14:51 # +1
TarasB 31.12.2012 14:03 # 0
bormand 31.12.2012 17:30 # 0
absolut 29.12.2012 07:52 # 0
И код становится машиннозависимым
Dummy00001 29.12.2012 23:11 # 0
вобщем что я хочу сказать: меня ГКды, специально писаные для ГК, утомляют еще больше чем школьные ГК. по крайней мере в последних есть эта наивная искренная неопытность и детское упрямство.
Vindicar 30.12.2012 15:54 # +1
А синтетика да, не веселит.
bormand 30.12.2012 19:16 # +1
Ну почему, попадается иногда веселая синтетика. Мне например этот код понравился настойчивыми попытками обмануть компилятор, и подсунуть ему другой this.
anonimb84a2f6fd141 30.12.2012 20:20 # +1
bormand 30.12.2012 21:02 # 0
anonimb84a2f6fd141 30.12.2012 21:44 # +2
eth0 31.12.2012 13:38 # 0
anonimb84a2f6fd141 31.12.2012 17:40 # 0
eth0 31.12.2012 20:54 # +1