6
我在C++ 11的lambda中發現了一個非常奇怪的問題。'this'pointer in C++ 11 lambda
#include <string>
#include <iostream>
using namespace std;
#include <boost/signals2.hpp>
boost::signals2::signal<void()> sig;
struct out {
void print_something() {
cout << "something" << endl;
}
out() {
auto start = [&] {
cout << "this in start: " << this << endl;
this->print_something();
};
cout << "this in constructor: " << this << endl;
// sig.connect(start);
sig.connect([&] {
cout << "this in signal: " << this << endl;
start();
});
this->print_something();
}
};
int main() {
out o;
sig();
}
代碼在不同的位置打印三個指針。我期待所有這三個指針應該是相同的值,但它們不是。下面是輸出:
this in constructor: 00F3FABB
something
this in signal: 00F3FABB
this in start: 00F3FB00
something
問題1:爲什麼this in start
有不同的價值?如何糾正?
問題2:由於this in start
是不同的指針,因此它不應該能夠調用print_something()
。我期望在這個崩潰,但它工作正常。爲什麼?
您正在通過引用 – JustSid
捕獲這個指針@JustSid:'this' [總是通過值捕獲](https://stackoverflow.com/q/16323032/56338),即使使用'[&]'。 – sth
@sth哈!你知道的越多,謝謝:) – JustSid