1. 编译器默认生成的函数
(1)构造函数
(2)拷贝构造函数
(3)赋值操作符重载
(4)移动构造函数
(5)移动赋值操作符重载
(6)析构函数
2. 生成规则
构造函数、拷贝构造函数、赋值操作符重载各自算作一类。如果用户实现了带参数的构造函数,则不会再默认生成不带参数的构造函数,但是不会影响编译器继续生成拷贝构造函数和赋值操作符重载
//a.h
#ifndef A_H
#define A_H
class A {
public:
A(int a);
// A &operator=(const A &a)
// {
// aaa = a.aaa;
// return *this;
// }
// A(const A &a)
// {
// aaa = a.aaa;
// }
private:
int aaa = 1;
};
#endif // A_H
//a.cpp
#include "a.h"
A::A(int a)
{
}
//main.cpp
#include "a.h"
int main(int argc, char *argv[])
{
A a1(1);
A a3(3);
a3 = a1; //这个没有定义赋值操作符,仍然可以赋值,说明编译器默认生成了赋值操作符函数
}
3. future和async
#include <iostream>
#include <future>
#include <chrono>
int long_running_task() {
std::this_thread::sleep_for(std::chrono::seconds(3));
return 42;
}
int main() {
std::future<int> result_future = std::async(std::launch::async, long_running_task);
// 在此处执行其他操作
int result = result_future.get();
std::cout << "Result: " << result << std::endl;
return 0;
}