死锁当一个操作需要两个及以上的互斥锁,就可能发生死锁。多个线程分别已经获取到其中一个互斥锁,而它们又在互相等待其他线程释放对方的互斥锁,从而导致死锁。注意,当线程相互等待时,也会造成“死锁”,即使两个线程内都没有“锁”。避免死锁通常情况下,避免死锁的建议之一是将多个互斥锁总是以据的方法swap,现在有两个该类的
原创
2024-05-31 13:42:40
33阅读
今天,和大家分享一些与内存管理相关的知识,本次的内容主要是new和delete的使用。内存这一块的知识,我们在学习C语言的时候,就有作相对细致的了解。我们现在来写几道题。做一个简单的回顾复习。内存的分布我们先来看看,下面一段代码:int globalVar = 1;
static int staticGlobalVar = 1;
void Test()
{
static int staticVar
原创
精选
2023-09-21 20:09:28
555阅读
点赞
1. C语言中的类型转换 在C语言中,如果赋值运算符左右两侧类型不同,或者形参与实参类型不匹配,或者返回值类型与 接收返回值类型不一致时,就需要发生类型转化,C语言中总共有两种形式的类型转换:隐式类型 转换和显式类型转换。1. 隐式类型转化:编译器在编译阶段自动进行,能转就转,不能转就编译失败2. 显式类
安装 vs2019https://zhuanlan.zhihu.com/p/94998894
原创
2022-04-27 17:48:17
901阅读
异常处理C++中异常处理包括:throw表达式,用于引发异常,表明遇到了无法处理的问题try语句块,try语句块开始,
原创
2024-05-31 13:44:00
29阅读
内联函数将频繁的小操作定义函数有以下好处:理解有意义的函数名比读懂等价的表达式要容易使用函数确保行为的
原创
2024-05-31 13:44:16
41阅读
虚析构函数含有虚函数的类,应该将析构函数声明为虚函数(虚析构函数)delete父类指针时,才会调用子类的析构函数,保证析构的完整性#include <iostream>using namespace std;class Animal {public: int m_age; virtual void speak() { cout << "Ani...
原创
2021-08-18 02:25:09
72阅读
面向对象类对象成员变量、成员函数封装、继承、多态…类C++中可以使用struct、class来定义一个类struct和class的区别struct的默认成员权限是publicclass的默认成员权限是private#include <iostream>using namespace std;struct Person { int m_id;...
原创
2021-08-18 02:25:18
76阅读
运算符重载(operator overload)运算符重载(操作符重载):可以为运算符增加一些新的功能#include <iostream>#include "Point.h"using namespace std;// operator overload//class Point {// friend Point operator+(const Point &a...
原创
2021-08-18 02:29:17
90阅读
友元友元包括友元函数和友元类如果将函数A(非成员函数)声明为类C的友元函数,那么函数A就能直接访问类C对象的所有成员如果将类A声明为类C的友元类,那么类A的所有成员函数都能直接访问类C对象的所有成员友元破坏了面向对象的封装性,但在某些频繁访问成员变量的地方可以提高性能#include <iostream>using namespace std;class Point...
原创
2021-08-18 02:29:23
85阅读
仿函数(函数对象)仿函数:将一个对象当作一个函数一样来使用对比普通函数,它作为对象可以保存状态#include <iostream>using namespace std;//int sum(int a, int b) {// return a + b;//}class Sum { int m_age;public: Sum(int age) :m_age...
原创
2022-03-06 11:17:55
64阅读
const_cast一般用于去除const属性,将const转换成非constdynamic_cast一般用于多态类型的转换,有运行时安全检测static_cast对比dynamic_cast,缺乏运行时安全检测不能交叉转换(不是同一继承体系的,无法转换)常用于基本数据类型的转换、非const转成const使用范围较广reinterpret_cast属于比较底层的...
原创
2022-03-06 11:17:57
96阅读
静态成员(static)静态成员:被static修饰的成员变量\函数可以通过对象(对象.静态成员)、对象指针(对象指针->静态成员)、类访问(类名::静态成员)静态成员变量存储在数据段(全局区,类似于全局变量),整个程序运行过程
原创
2022-03-06 11:22:22
95阅读
命名空间的嵌套有个默认的全局命名空间,我们创建的命名空间默认都嵌套在它里面继承继承,可以让子类拥有父类的所有成员(变量\函数)关系描述Student是子类(subclass,派生类)Person是父类(superclass,超类)C++中没有像Java、Objective-C的基类Java:java.lang.ObjectObjective-C:NSObject...
原创
2022-03-06 11:27:39
112阅读
strcpy过期问题解决声明和实现分离#include <iostream>#include "Person.h"using namespace std;int main() { { Person person; person.setAge(20); cout << person.getAge() << endl; } ...
原创
2022-03-06 11:29:08
33阅读
引用(Reference)在C语言中,使用指针(Pointer)可以间接获取、修改某个变量的值在C++中,使用引用(Reference)可以起到跟指针类似的功能注意点引用相当于是变量的别名(基本数据类型、枚举、结构体、类、指针、数组等,都可以有引用)对引用做计算,就是对引用所指向的变量做计算在定义的时候就必须初始化,一旦指向了某个变量,就不可以再改变,“从一而终”可以利用引用初始...
原创
2022-03-06 11:30:04
99阅读
面向对象类对象成员变量、成员函数封装、继承、多态…类C++中可以使用struct、class来定义一个类struct和class的区别struct的默认成员权限是publicclass的默认成员权限是private#include <iostream>using namespace std;struct Person { int m_id;...
原创
2022-03-06 11:30:48
130阅读
C++的函数模板是通用的函数描述。怎么理解呢?通俗地讲,通过使用泛型来定义函数,泛型指的是其可用具体的类型(int/double)来替换,通过将类型作为参数传递给模版,可以使编译器生成该类型的函数。当然由于模版允许以泛型的方式来编写程序,因此有时也被称为通用编程。函数模版定义我们通过一个简单的例子来看看函数模版的存在的意义:假设我们有一个函数来交换两个int类型的值:void swap_or(in
原创
2024-10-18 17:17:25
67阅读
层次锁实现:#include <mutex>using namespace std;class hierarchical_mutex{ std::mutex internal_mutex; unsigned long const hierarchy
原创
2024-05-31 13:42:36
25阅读
友元友元包括友元函数和友元类如果将函数A(非成员函数)声明为类C的友元函数,那么函数A
原创
2022-03-06 11:21:48
78阅读