目录
bool强转
const构成重载:const修饰*p
移动构造
new int (10)所做的四件事
this指针---为什么函数里面需要this指针?
.和->的区别
new创建对象
仿函数
new和malloc的区别
c++系统自动给出的函数有
delete和delete[ ]区别何在
检查有没有析构函数
explict外部
内存泄漏的本质:丢失了内存地址
不能重载的运算符:?:、::、*.
using
为什么空间释放了但还是可以读取数据
函数的生存期不受函数生存期影响时,可以使用引用返回;
struct和class在设计类时的区别
结构体为什么一定要内存对齐?
c++11的铁三角
右值/左值/值返回与将亡值
a++不可以取地址;++a可以取地址
引用的本质是指针,自身为常性
bool强转
可以将变量变为bool类型,在if语句中可以判断
operator bool() const
{
return (ptr !=nullptr);
}
const构成重载:const修饰*p
void func(int *p){}
void func(const int* p){}
移动构造
my_unique_ptr(const my_unique_ptr&& x)
{
ptr = x.ptr;
x.ptr = nullptr;
}
拷贝构造和移动构造同时书写了,那么就会调用移动构造
new int (10)所做的四件事
1.计算10的大小 2.malloc 3.赋值 4.返回所在地址
new没有能力去构造常对象
is具有常性,不可以对is的指向进行修改。
const修饰*is,is的指向可以修改
this指针---为什么函数里面需要this指针?
- 创建对象类型有多个,方法共享只有一个,用this来调用函数方法
- 系统是面向过程编程,底层把面向对象编程变为面向过程的体系
- 类的成员函数都含有this指针,只有static,友元,全局没有this指针。
.和->的区别
. 的时候函数都是智能指针的方法
-> 的时候函数都是 类 类 型 的方法
new创建对象
std::unique_ptr<Int> ip(new(10));
std::unique_ptr<Int> sp=new Int(100);
仿函数
struct ADD
{
int operator()(int a, int b) const//仿函数()
{
return a + b;
}
};
int main()
{
ADD add;
int x = add(12, 23);//调用仿函数
//标准c++没有三元仿函数
x = add.operator()(12, 23);//把括号当成函数名了
}
new和malloc的区别
- 失败处理方式不同,new会抛出异常,malloc不会
- new有构造函数予以赋值
- new有重载运算符
c++系统自动给出的函数有
- 缺省的构造
- 缺省的拷贝构造
- 缺省的析构
- 缺省的赋值
!!!以上四个必须有
delete和delete[ ]区别何在
int main()
{
Int* p=new Int(10);
Int*s =new Int[10];
delete p;
delete[]s;
return 0;
}
检查有没有析构函数
小tips:写代码判断是否相等时得把常量放在左边,变量放在右边
explict外部
内存泄漏的本质:丢失了内存地址
不能重载的运算符:?:、::、*.
using
是类型重定义(命名),和typdef的意义差不多
为什么空间释放了但还是可以读取数据
int ar[100000];栈帧构建的太大,数据在接近栈处,即使把空间释放了,但是在处理过程中无法干扰数据,所以值还是可以被打印出来
函数的生存期不受函数生存期影响时,可以使用引用返回;
struct和class在设计类时的区别
* 1.模板类型定义class可以,typename可以,struct不可以
* 2.struct默认公有,class默认私有
* 3.在设计类型时,纯虚函数interface
*/
结构体为什么一定要内存对齐?
结构体内存对齐是拿空间换取时间的做法。提高效率
c++11的铁三角
C++11和C11都是C++11
右值/移动/完美转发
右值/左值/值返回与将亡值
通用寄存器eax,ebx,ecx,edx(都只有四字节),作为将亡值的返回时的保存
如何将结构体初始化后返回到调用函数内?
值返回时 会在主函数中建立一个将亡值的副本,把调用函数返回值(将亡值)赋给指针(内置类型)产生的将亡值不可写
将亡值没有名字就是纯右值(归结到右值中),有名字就是泛左值(归结到左值中)
将亡值在表达式的计算中产生
将亡值可修改吗:
1.内置类型值返回时的将亡值不可以修改
2.类类型(即程序员自己设计的类型)值返回时的将亡值可修改
a++不可以取地址;++a可以取地址
a++是一个没有名字的将亡值(a+1) 还没有给a赋值,取地址(先取地址再++)
++a是先把将亡值(a+1)已经赋值给了a,再取地址(先++再取地址)