引言
随着 C++11 标准的提出,智能指针作为工具引入了这个以手动管理内存而闻名的编程语言,用以自动管理动态内存,避免 C++ 开发中司空见惯的内存泄漏和指针错误问题。在此之前,C++ 的指针均沿用 C 风格的传统指针,依赖开发者手动管理,安全性差。
当然,为了自动管理动态内存,智能指针自然引入了额外的机制、更加复杂的写法,以及独立于传统 C 指针之外的、对于先前的大批 C++ 程序员而言的额外的学习成本。这无疑会带来争论:在 C 指针如此成熟的当下,我们是否真正需要智能指针?
答案是肯定的:我们不仅需要智能指针,而且应该尽可能多地在大型项目中使用智能指针,避免使用传统指针
为什么需要使用智能指针
简单而言,使用传统的 C 风格指针容易出现以下两方面的问题:
由于忘记释放内存,造成内存泄露以致程序崩溃
指针的管理权问题:即当多个函数同时调用同一个指针,无法清晰地确定该指针的生命周期在何处结束
问题 1:内存泄漏
问题 1 是非常传统的 C 指针问题,也是讨论最多的。虽然解决这个问题的方法说起来非常简单:在写代码时更加专心、更加细致,但即使是再有经验的程序员(这里并没有使用 ...
引言
这篇文章用来介绍 C++ 的编译、链接、优化等原理,同时解释了 .cpp、.h、.o、.exe 等文件类型的区别和其分别代表哪个环节。
从 main.cpp 开始
我们先创建一个基本的 main.cpp 源文件:
123456#include <iostream>int main() { std::cout << "Hello World!\n"; return 0;}
这是个最基本的 C++ 脚本,各函数的功能就不过多介绍了,但是依旧指出几个需要注意的点:
不使用 using namespace std 引入完整的标准命名空间,而是在需要使用的位置使用 std:: 直接引用,避免出现命名空间污染问题
使用 cout 与 \n 提升程序执行性能,使用 \n 而不是 std::endl 可以避免换行同时刷新缓冲区,极大减少性能开销
使用 #include 宏等于直接将 iostream 运行库头文件的全部内容直接复制粘贴到文件的顶端
编译 main.cpp 源文件
接下来,编译刚刚完成的 m ...
前言
在上一篇介绍 Event 事件系统的文章中,提到了 Event 实际上是基于 Delegate 委托来实现的。但由于篇幅限制,上篇文章并未对委托进行全面且系统的讲解,同时介绍的顺序也可能显得有些晦涩难懂。
因此,本文将从头开始介绍委托,并讲解基于委托的三种匿名方法:Lambda 表达式、Action 和 Func 方法。同时,将会介绍委托可以如何简化复杂的交互代码,并给出一个简单的实现案例。
本教程测试环境
硬件与系统:MacOS Sequoia 15.4.1 MacBook Pro 2024
软件:Jetbrains Rider 2024.3.4、Unity 2022.3.48f1c1
基本的 Delegate 使用
虽然本文所讲的内容是上一篇文章 Event 系统的前提知识,但由于 Unity 的基本操作和 MonoBehaviour 类的介绍已经在前文中进行过详细叙述,因此不在本文中重新讲解。如果你完全不了解 Unity 的基本操作,建议先阅读上一篇介绍 Event 系统的文章。
首先我们需要创建一个基本的测试平台,在 Unity 中新建一个场景,创建第一个脚本 Tes ...
观察者模式 - 游戏设计模式 Design Patterns Revisited
随便打开电脑中的一个应用,很有可能它就使用了MVC架构, 而究其根本,是因为观察者模式。 观察者模式应用广泛,Java甚至将其放到了核心库之中(java.util.Observer),而C#直接将其嵌入了语法(event关键字)。
观察者模式是应用最广泛和最广为人知的 GoF 模式,但是游戏开发世界与世隔绝,所以对你来说,它也许是全新的。
前言
上面这一段摘自 Bob Nystrom 的《游戏编程模式》一书的“观察者模式”章节。
什么是观察者模式?可以这么认为:在软件设计的世界里,观察者模式如同一座桥梁,连接着系统中高度松耦合的组件。
通过“发布-订阅”的思想,观察者让对象间无需直接通信,仅通过状态变化的通知即可协同工作——当某个对象(发布者)发生状态改变时,所有订阅其变化的观察者(订阅者)都能收到通知并作出响应。
这种设计模式在用户界面开发、游戏逻辑触发、分布式系统通信等领域中,都是解决“解耦”问题的黄金准则。
由于 C# 在设计之初,高度借鉴了 Java ...
AnZhiYu主题中大部分标签移植于店长的hexo-butterfly-tag-plugins-plus,转载请注明来自安知鱼
段落文本 p
标签语法配置参数样式预览示例源码1{% p 样式参数(参数以空格划分), 文本内容 %}
字体: logo, code
颜色: red,yellow,green,cyan,blue,gray
大小: small, h4, h3, h2, h1, large, huge, ultra
对齐方向: left, center, right
彩色文字在一段话中方便插入各种颜色的标签,包括:红色、黄色、绿色、青色、蓝色、灰色。
超大号文字文档「开始」页面中的标题部分就是超大号文字。
Volantis
A Wonderful Theme for Hexo
123456- 彩色文字 在一段话中方便插入各种颜色的标签,包括:{% p red, 红色 %}、{% p yellow, 黄色 %}、{% p green, 绿色 %}、{% p cya ...
前言
最近刚刚学完 NodeJS 的入门课程,正好通过简单的 API 开发来总结一下 NodeJS 的学习内容,同时也巩固一下学到的知识点。
本次需要实现的是连接 MySQL 数据库的后端 API,通过使用 GET 和 POST 请求,调用数据库分别实现注册和登录功能。虽然内容较为简单,但基本概括了 mysql2 和 express 进行 API 搭建的主要功能。
书写代码的顺序可能会有一些跳脱,但基本符合该项目的编写流程和思路。
项目准备
新建一个文件夹 mysql-api,使用你的 IDE 打开该文件夹,我在这一步使用的是 JetBrains Rider,进入后在文件夹内打开终端。
确认 NodeJS 和 npm 环境与版本正常
12node -vnpm -v
通过 npm 安装前置包:Express 软件包、Body-Parser 软件包和 mysql2 软件包
123npm install --save expressnpm install --save body-parsernpm install --save mysql2
这一步会在文件夹内创建一个 node_module ...
教程与学习
未读前言
用来记录一下 MySQL 的主要代码,方便初步学习和后续复习。。。专业人士路过就当看个乐子好了。
以下的所有操作都以新数据库 Example 为例进行。
本教程测试环境
硬件与系统:MacOS Sequoia 15.1 MacBook Pro 2024
软件:MySQL Workbench 8.0.41 Community
创建与添加
创建数据库
1CREATE DATABASE Example;
同名(不区分大小写)数据库只能创建一次,重复执行同一条创建代码会报错。
进入数据库
1USE Example;
当根目录中含有多个数据库时,需要选定数据库执行下一步操作。在 MySQL Workbench 中,你可以通过上面的 USE 代码来进入指定数据库,也可以直接双击进入。
创建表格
数据库的下一级是表格,可以使用 CREATE TABLE 命令来创建表格。创建时需要指定创建表格的列名,以及每个列名对应的数据类型(类似于声明变量)。
在这里假设需要创建一个学生信息登记表,要用到的数据有 学生 ID,姓名,出生日期,代码如下:
1234567USE Example;CREATE TA ...
前言
距离 1 月 27 日从 Apple 长沙提货这台 2024 款 MacBook Pro M4Pro 24G / 1T 14 英寸电脑已经有两三周了。这段时间可以说是超高强度体验性使用,基本上使用场景涉及到了 80% 的 MacOS 功能,所以今天正好写一篇使用两周的大致体验。
使用强度真的很高
首先,作为使用 Windows 系统长达 10 年、从 Windows 7 一直用到 Windows 11 的微软深度用户,在选择 Mac 一开始确实对系统适应、软件兼容等方面有着很深的担忧。但奈何的确是迫切地需要一台具有极强便携性和较优性能的笔记本来辅助工作(先前使用的是联想轻薄本 ThinkBook 16+ 搭配 RTX 4070Ti Super 台式电脑使用,在宿舍游戏和开发工作方面问题不大,但一旦离开台式电脑就一点用没有了),最后还是选择了入手 MacBook 系列笔记本。
(其实一开始是想买 MacBook Air M3 16+512 的,然后一路加配置加到了 M4 Pro 24+1T,配置焦虑的毛病一辈子改不了了)
现在深度体验了两周下来,得到的结论是:真香。除了部分不及预期 ...
引言
在日常学习、工作生活中,经常会出现需要 MacBook 设备与 Windows 设备协同工作,或者使用 MacBook 远程控制家中的 Windows 系统电脑。在这种需求下,市面上已经有多种远程操控软件,但本文将会介绍最简单、同时相当稳定的方法——使用微软的 Microsoft Remote Desktop for Mac 直接调用 Windows 系统自带的远程桌面。
需要注意:该方案适用于临时远程控制进行文件传输或协同工作,不适用于远程游戏。
本教程测试环境
Windows 11 专业版 台式 PC
MacOS Sequoia 15.1 MacBook Pro 2024
本地局域网下无线控制 Windows
1. 在 Windows 系统中打开远程桌面
打开 Windows 系统设置,在系统设置中开启“远程桌面”选项。(如果在设置中的位置不同,可以直接搜索找到该选项)
接下来查看 Windows 电脑的 IP 地址。在 cmd 或 PowerShell 中输入 ipconfig ,获取台式电脑的 IPv4 地址。
需要注意的是,要使得电脑可以被远程控制,必须为 ...




















