Skip to content

Instantly share code, notes, and snippets.

@earthday
Created September 22, 2016 09:28
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
Star You must be signed in to star a gist
Save earthday/31c100d59451cd986a29967da7b10264 to your computer and use it in GitHub Desktop.
Run it online from http://cpp.sh/77sn5
#include <iostream>
#include <thread>
using namespace std;
int _id = 1;
class Person
{
public:
Person()
: m_isCopied(false)
{
m_id = _id++;
cout << "[" << m_id << "] " << "Person::Constructor()" << endl;
}
Person(const Person& other)
: m_isCopied(true)
{
m_id = _id++;
cout << "[" << m_id << "] " << "Person::Constructor() - Copied" << endl;
}
~Person()
{
cout << "[" << m_id << "] " << "Person::Destructor()" << (m_isCopied ? " - Copied" : "") << endl;
}
int m_id;
bool m_isCopied;
};
int main()
{
Person p;
Person p1 = p;
cout << "Before func" << endl;
thread t1([p]() {
cout << "Person in lambda: " << p.m_id << endl;
});
t1.join();
cout << "After func" << endl;
return 0;
}
/*
Output of VS2015
-----------------------------------------------------------
[1] Person::Constructor()
[2] Person::Constructor() - Copied
Before func
[3] Person::Constructor() - Copied
[4] Person::Constructor() - Copied
Person in lambda: 4
[4] Person::Destructor() - Copied
[3] Person::Destructor() - Copied
After func
[2] Person::Destructor() - Copied
[1] Person::Destructor()
Output of GCC with C++11, http://cpp.sh/77sn5
-----------------------------------------------------------
[1] Person::Constructor()
[2] Person::Constructor() - Copied
Before func
[3] Person::Constructor() - Copied
[4] Person::Constructor() - Copied
[5] Person::Constructor() - Copied
[4] Person::Destructor() - Copied
[3] Person::Destructor() - Copied
Person in lambda: 5
[5] Person::Destructor() - Copied
After func
[2] Person::Destructor() - Copied
[1] Person::Destructor()
*/
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment