自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(28)
  • 收藏
  • 关注

原创 【c++】c++11 的三种智能指针

具体来说,当两个对象相互引用对方的 std::shared_ptr 时,会形成一个循环,导致它们的引用计数无法降为零,进而无法释放内存,此时,Person 和 Car 对象的引用计数都为 1,原因是它们相互持有对方的 std::shared_ptr。,c++11 中,引入了三种智能指针:unique_ptr、shared_ptr 和 weak_ptr,用于自动管理动态分配的内存,防止内存泄漏等问题。person 被销毁,其引用的 Person 对象的引用计数减少 1,变为 1。可以指向同一个对象。

2025-09-07 09:45:00 1102

原创 【c++】字符串 string 以及与右值结合

是 C++中的一个用于处理字符串的类,定义在头文件<string>中。封装了一个可变长度的,可以。在使用指向字符数据时例如字符串”yyyyyyy“字符串存储在数据区,并且是只读属性,多个char类型指针指向同一字符串”yyyyyyy“,他们的地址是一样的。不能够对其进行修改。如果要对其修改,使用一个可以修改的来存储字符串。

2025-09-06 07:45:00 672

原创 【c++】右值和右值引用

C++11右值引用与移动语义解析 本文介绍了C++11中的右值引用和移动语义机制。左值代表具名对象,右值包括字面量和临时对象。通过右值引用(&&)可以绑定临时对象,实现资源的高效转移。移动构造函数和移动赋值运算符利用右值引用,将资源从临时对象转移而不进行深拷贝,显著提升性能。文章详细阐述了移动语义在容器扩容、函数返回值优化等场景的应用,以及std::move和完美转发的实现原理。右值引用有效解决了传统C++中不必要的深拷贝问题,为资源管理提供了更高效的解决方案。

2025-09-05 14:15:00 860

原创 【c++】移动构造 移动赋值 转移 完美转发

本文介绍了C++中的移动语义和完美转发机制。移动构造和移动赋值通过右值引用实现资源高效转移,避免不必要的拷贝。移动构造用于初始化新对象,移动赋值用于已有对象间的资源转移。完美转发(std::forward)则保持参数原始值类别(左值/右值),在模板编程中尤为重要。这些特性共同提升了C++程序的性能和资源管理效率,是现代C++编程的核心技术之一。

2025-09-04 10:39:12 412

原创 【c++】四种类型转换形式

C++ 提供了 4 种显式类型转换形式(Type Casting),它们都属于 运算符关键字形式的转换,比传统的 C 风格强制类型转换((type)obj)更安全、更可控。

2025-09-03 11:28:48 969

原创 【c++】多态+RTTI (运行时的类型识别信息)

RTTI(Run-Time Type Information,运行时类型识别) 是 C++ 提供的一种机制,允许在程序运行时获取对象的实际类型。它主要依赖 虚函数表(vtable) 进行类型信息存储和查找,适用于多态场景。

2025-09-02 17:39:55 937

原创 【c++】多态中的构造函数和析构函数

ps:构建派生类对象时首先构造匿名的基类对象(前面提到过)此时调用基类的构造函数,使得虚函数指针指向基类的虚函数表,接着调用派生类的构造函数,重置虚表指针指向派生类的虚表。会触发动态绑定,正确调用。的顺序进行,vptr 的。:将基类析构函数声明为。(编译器隐式处理)。

2025-09-01 13:56:44 969

原创 【c++】继承

继承(Inheritance)是 面向对象编程 的三大特性之一(封装、继承、多态)。它允许 子类(派生类,Derived Class) 复用 父类(基类,Base Class) 的数据成员和成员函数。

2025-08-31 03:15:00 1009

原创 【c++】常对象,常方法

在 C++ 中,使用 const 关键字修饰的对象被称为常量对象。

2025-08-30 11:15:00 338

原创 【c++】用户自定义类型 返回对应数据时创建了多少次对象

【c++】用户自定义类型 返回对应数据时创建了多少次对象

2025-08-29 11:03:48 382

原创 【c++】运算符重载

运算符重载(Operator Overloading)就是给已有的运算符(+ - * / [] () -> 等)重新定义功能,使其能够作用于用户自定义的类型(比如类、结构体)。

2025-08-28 10:00:42 348

原创 【c++】一个空类所具有的6个函数

使用表达式 &e1 时,会调用我们重载的取址运算符(非 const 版本);通过这个示例,我们可以直观地看到即使一个空类没有任何数据成员,编译器在需要时仍会提供默认的构造、拷贝、赋值、取址和析构等六大函数,从而保证对象能够正确创建、复制、赋值、取地址和销毁。)时,调用了拷贝构造函数(输出 “Copy constructor called”)。当 main 函数结束时,对象 e1、e2 和 e3 都将被销毁,调用析构函数(会依次输出 “Destructor called”)。当定义对象 Empty e1;

2025-08-27 10:45:00 437

原创 【c++】拷贝构造

拷贝构造函数(Copy Constructor)是 一种特殊的构造函数,用于使用同一类的 已存在对象 来初始化一个新的对象。

2025-08-26 13:54:39 315

原创 【c++】析构函数

一旦类设计成“多态基类”,

2025-08-25 15:09:08 567

原创 【c++】new

类型示例代码分配方式初始化释放方式普通 new堆分配调用构造/赋值deletenew[]new int[5]堆分配逐个初始化delete[]使用已有内存构造函数手动析构t->~T()堆分配构造函数delete自定义 new/delete可自定义构造函数自定义delete。

2025-08-23 14:45:00 458 1

原创 【c++】构造函数

类型功能特点与示例默认构造函数无参数或所有参数有默认值,用于对象默认初始化y=0;带参数构造函数允许传入参数初始化对象成员y=b;拷贝构造函数用一个对象初始化另一个对象y=p.y;移动构造函数(C++11)用右值初始化对象,避免深拷贝,提高效率y=p.y;委托构造函数(C++11)一个构造函数调用同类的其他构造函数。

2025-08-21 13:56:02 1226

原创 【c++】封装,this指针

通过访问控制和接口设计,保护数据、隔离变化。

2025-08-21 09:53:42 258

原创 【c++】面向过程 面向对象

对比点面向过程面向对象核心思想函数/步骤为核心对象为核心数据与方法分离封装在对象中复用性依赖函数库继承、多态提高复用性扩展性较差较强适用场景小型、效率要求高的程序大型、复杂、需要长期维护的项目。

2025-08-20 13:54:05 480

原创 【c++】运行时多态详解

运行时多态指的是函数调用在运行阶段才能确定调用的具体函数版本。其核心机制是虚函数(virtual function)与继承(inheritance)。通过基类指针或引用调用虚函数,实际执行的是派生类对象的函数实现。这种绑定不是在编译时完成的,而是通过虚函数表(vtable)在运行时动态解析。运行时多态是 C++ 支持面向对象编程的核心机制。通过虚函数与继承,可以让基类指针或引用在运行时根据对象类型调用正确的方法。运行时多态相比编译时多态更灵活,但也带来一些性能开销。

2025-08-19 16:14:17 1022 1

原创 【c++】malloc和new

当使用 new Type(arguments) 时,编译器首先根据类型自动计算出所需的内存大小,然后调用内部的分配函数(底层往往会调用 malloc(或等效的内存分配函数)来获得内存。不论是 malloc 还是 new 内部的 operator new,最终都会调用类似 sbrk(适用于较小的内存分配)或 mmap(适用于大块内存分配,比如通常以 128KB 为界限)这样的系统调用来扩展进程的虚拟内存空间。malloc 只分配内存,不会初始化(也就是说,内存中的数据内容是未定义的)。

2025-08-19 16:05:49 971

原创 【c++】编译时多态详解

在 C++ 中,多态(Polymorphism) 是面向对象编程的重要特性。按照发生的时机,可以分为 编译时多态(静态多态) 和 运行时多态(动态多态)。

2025-08-18 18:08:39 448

原创 【c++】缺省参数

默认参数应在函数的声明中定义(通常在头文件中),而非函数的定义(实现文件)。若函数仅有定义而无声明,则默认参数可写在定义中。1.在 C++ 中,函数的缺省参数(默认参数)是函数形参可以有默认值(一种允许调用时省略部分参数的机制)2.默认参数应在函数的声明中定义,而非函数的定义。若函数仅有定义而无声明,则默认参数可写在定义中。2.默认参数应在函数的声明中定义,而非函数的定义。若函数仅有定义而无声明,则默认参数可写在定义中。调用函数时,传递的参数按顺序从左到右填充,未传递的参数使用默认值。

2025-08-18 14:39:58 391

原创 【c++】内联函数(Inline Function)

函数体过大、递归、复杂逻辑可能被拒绝。:提高运行效率,但可能导致可执行文件变大(代码膨胀)宏可以避免调用开销,但缺乏类型安全和作用域规则。中,且声明和定义不可分离,否则可能引发链接错误。不适合逻辑复杂、调用不频繁、体积较大的函数。普通函数有调用开销(压栈、跳转、返回等操作)省去了函数调用的额外开销,但会增加代码体积。关键字提示编译器,在调用该函数的地方。将调用处替换成函数体本身,不发生跳转。:支持类型检查、作用域规则,可以与。:一般不会被内联,因为依赖动态绑定;,而不是进行普通的函数调用。

2025-08-15 17:27:48 461

原创 【c++】函数调用机制

【c++】函数调用机制1.建立栈帧空间2.传递数据,为局部变量分配空间3.保护现场,主调函数运行状态和返回值地址入栈4.执行被调函数体5.释放局部变量的栈空间6.恢复现场,取主调函数运行状态和返回值地址7.继续执行主调函数后续语句详细介绍:ebp esp eax 等均是寄存器1. 建立栈帧空间:当函数被调用时,操作系统会为该函数分配一个 栈帧(esp(低地址 栈顶) ebp(高地址 栈底)),这是函数的局部空间。

2025-08-14 14:38:21 555

原创 【c++】引用&

C++ 里的 引用(reference)本质

2025-08-13 16:31:07 461

原创 【c++】const关键字

const 是 C/C++ 中用于修饰变量或对象,使其在逻辑上不可修改的关键字。虽然看起来简单,但在不同场景下的行为差异很大,尤其是 C 和 C++ 中的差别更容易让人混淆。

2025-08-13 14:23:24 938

原创 【c++】【设计模式】单例模式

→ 饥汉模式(天然安全) 或 懒汉模式 + 双重检查锁(DCLP)(Meyers Singleton),既懒加载又线程安全。就创建实例,主函数调用之前对象已经被构建了。避免了线程安全问题,但可能造成资源浪费。→ 用懒汉模式(简单、省资源)C++11 及以后也可以用。

2025-08-12 17:52:56 303

原创 【c++】static关键字

static关键字能修饰的类型

2025-08-12 17:24:49 420

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除