杂文(33)记录一点需要的C++知识点

最后更新于2022年2月21日 11:46:22

收集到了一些知识点,转成公开博文了。

智能指针

C++11中智能指针的原理、使用、实现
C++智能指针
Modern C++ 智能指针详解
std::make_shared

引用

C++里面的&没有取地址的意思!!!我学的语言太多,又不精通一门,都给我学混、学傻了。
C++的引用类型
C++中引用(&)的用法和应用实例

boost::bind()

因为搞不明白所以单独拿出来了
boost bind使用指南 这个写的很朴实,不像很多文章,空中楼阁的不知道在说什么,唉
Boost::bind使用详解

C++ 杂项

C++ 工程实践(8):值语义
C++11列表初始化(统一了初始化方式)
How to create two classes in C++ which use each other as data?

1)、虚析构的用处

并不是要把所有类的析构函数都写成虚函数。因为当类里面有虚函数的时候,编译器会给类添加一个虚函数表,里面来存放虚函数指针,这样就会增加类的存储空间。所以,只有当一个类被用来作为基类的时候,才把析构函数写成虚函数

2)、Static

我们知道在函数内部定义的变量,当程序执行到它的定义处时,编译器为它在栈上分配空间,函数在栈上分配的空间在此函数执行结束时会释放掉,这样就产生了一个问题: 如果想将函数中此变量的值保存至下一次调用时,如何实现? 最容易想到的方法是定义为全局的变量,但定义一个全局变量有许多缺点,最明显的缺点是破坏了此变量的访问范围(使得在此函数中定义的变量,不仅仅只受此函数控制)。static 关键字则可以很好的解决这个问题。
另外,在 C++ 中,需要一个数据对象为整个类而非某个对象服务,同时又力求不破坏类的封装性,即要求此成员隐藏在类的内部,对外不可见时,可将其定义为静态数据。

3)、子类调用父类的构造函数来初始化由父类继承来的成员变量

子类调用父类的构造函数

4)、类模板函数不能分开

类模板函数分开定义
在类的模板中,类成员函数在另外一个文件中定义是不行的,因为在代码编译的时候类的模板没有实例化,成员函数的定义文件就没有打开,造成在实例化的时候不识别函数。
举例:

//StateMachine.h
#ifndef STATEMACHINE_H
#define STATEMACHINE_H

#include <string>
#include "State.h"

template <class entity_type>
class StateMachine {
public:
    //省略Constructor and Deconstructor
	//省略Getter and Setter
	
	//下面是想要分开写的成员函数
    void StateMachineUpdate() const;

private:
    //省略member variables
};

#endif

然后把想要分开写的成员函数写在cpp文件里面:

//StateMachine.cpp
#include "StateMachine.h"

template <class entity_type>
void StateMachine<entity_type>::StateMachineUpdate() const {
	//省略函数逻辑
}

这样在链接阶段会报错undefined reference,没办法只能把声明和实现都写在头文件里,如下:

//StateMachine.h
#ifndef STATEMACHINE_H
#define STATEMACHINE_H

#include <string>
#include "State.h"

template <class entity_type>
class StateMachine {
public:
    //省略Constructor and Deconstructor
	//省略Getter and Setter
	
	//下面是想要分开写的成员函数
    void StateMachineUpdate() const {
		//省略函数逻辑
	}
private:
    //省略member variables
};

#endif

5)、C++的单例

静态成员函数与私有构造函数(对单例模式的理解)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值