【发布时间】:2016-06-19 12:11:42
【问题描述】:
我在 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(s) 指针。我原以为所有三个 this 指针都应该是相同的值,但事实并非如此。这是输出:
this in constructor: 00F3FABB
something
this in signal: 00F3FABB
this in start: 00F3FB00
something
问题一:为什么this in start 的值不同?如何纠正?
问题2:由于this in start是不同的指针,它应该不能调用print_something()。我希望这会崩溃,但它工作正常。为什么?
【问题讨论】:
-
您正在通过引用捕获 this 指针
-
@JustSid:
this是 always captured by value,即使是[&]。 -
@sth 哈!你知道的越多,谢谢:)