aj3*_*423 6 lambda pointers c++11
我在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();
}
Run Code Online (Sandbox Code Playgroud)
代码在不同位置打印三个this(s)指针.我期待所有三个这个指针应该是相同的值,但它们不是.这是输出:
this in constructor: 00F3FABB
something
this in signal: 00F3FABB
this in start: 00F3FB00
something
Run Code Online (Sandbox Code Playgroud)
问题1:为什么this in start有不同的价值?怎么纠正呢?
问题2:由于它this in start是一个不同的指针,它不应该能够调用print_something().我希望这会崩溃,但它运作正常.为什么?
您start通过引用捕获,但变量start和包含的lambda函数在结束时被销毁out().
稍后信号处理程序尝试调用start(),但lambda函数不再存在.也许存储它的存储器this被同时覆盖,导致意外输出.
print_something()尽管this由于函数实际上没有尝试使用,但调用不会崩溃this.函数中的打印是独立的,this并且print_somethings地址的查找可以在编译时发生,因此调用函数不会this在运行时访问.
| 归档时间: |
|
| 查看次数: |
601 次 |
| 最近记录: |