【创作128天纪念】从新手村踏上征途
前言:2026年4月1日,我发表了第一篇技术博客《菜刀小试之我才刚进新手村》。不知不觉,今天是我成为 C/C++ 创作者的第 128 天。回首这段旅程,从最初敲下第一个指针示例,到文章荣幸入选《C/C++领域内容榜》第 6 名,创作见证了我的每一次技术蜕变。
一、机缘:为何踏上创作之路
还记得 2026 年 04 月 01 日,我怀着忐忑与期待的心情发布了博客生涯的第一篇文章------《菜刀小试之我才刚进新手村》。
最初选择写博客的初心非常纯粹:
- 啃硬骨头的记录:C/C++ 语言博大精深,动态内存管理、指针与引用、泛型编程、数据结构底层实现......每一个知识点都充满挑战。每当在一个内存泄漏(Memory Leak)或悬挂指针(Dangling Pointer)上折腾很久并最终解决后,我都希望能系统地记录下来,避免重复踩坑。
- "倒逼输入"的输出机制:学习编程最怕"看懂了但写不出来"。把一个复杂的底层技术点用清晰的逻辑、图文和规范的代码讲明白,是检验自己是否真正掌握的最有效方式。
- 技术交流与共同成长:开源社区和技术博客是开发者最好的精神家园。我希望将自己在日常学习与实践中的心得分享出来,与广大的技术同行一起交流探讨。
二、收获:汗水浇灌出的数据与同伴
这 128 天的坚持与沉淀,带来了远超预期的反馈与惊喜:
- 🏆 榜单突破 :文章荣幸入选《C/C++领域内容榜》第 6 名!
- 📈 数据沉淀 :
- 总点赞:984 次
- 互动评论:252 次
- 文章收藏:616 次
- 代码片分享:1386 次
- 博客总排名:18106 名
- 原力等级:Level 4(原力分 536)
比数据更珍贵的,是正向的技术反馈。每当看到评论区有读者回复"这篇文章帮我彻底搞懂了动态内存分配"、"代码结构写得很规范优雅",或是与同好们在评论区深度探讨算法优化与底层机制时,那种技术共鸣带来的成就感是无可替代的。
三、日常:平衡学习与创作的节奏
很多人常问:"在有限的精力下,如何平衡日常学习与博客创作?"
对我而言,创作早已不再是额外的负担,而是学习流程中自然顺畅的最后一环:
- "复盘即创作":我从不专门花大块时间去凑字数,而是在完成一个代码模块、搞懂一个复杂数据结构(如顺序表、自定义链表、内存池)或解决一个 Bug 后,顺手把逻辑提炼、踩坑记录和重构后的代码梳理成 Markdown 文档。
- 碎片化积累 + 模块化输出:平时利用碎片时间记录框架和代码片段,周末或空闲时集中组织语言。这种习惯极大地提升了我的代码规范意识与逻辑表达能力。
四、成就:我写过最满意的一段 C++ 代码
在过去的创作与实践中,我始终追求代码的安全性、内存管理的严谨性以及极致的运行效率。下面是我重构并长期使用的一个符合 RAII 原则且具备强异常安全性的通用动态数组(Dynamic Sequential List / Safe Vector)的核心实现:
cpp
#include <iostream>
#include <initializer_list>
#include <stdexcept>
#include <algorithm>
#include <utility>
/**
* @brief 符合 RAII 原则的通用动态顺序表 (Safe Vector Implementation)
* @tparam T 元素类型
*/
template <typename T>
class DynamicArray {
private:
T* data_; // 动态内存指针
size_t capacity_; // 当前分配容量
size_t size_; // 当前有效元素个数
// 动态扩容机制(指数级增长)
void reallocate(size_t new_capacity) {
T* new_data = new T[new_capacity];
for (size_t i = 0; i < size_; ++i) {
new_data[i] = std::move(data_[i]); // 优先移动,提升性能
}
delete[] data_;
data_ = new_data;
capacity_ = new_capacity;
}
public:
// 默认构造函数
explicit DynamicArray(size_t initial_capacity = 4)
: data_(new T[initial_capacity]), capacity_(initial_capacity), size_(0) {}
// 初始化列表构造函数
DynamicArray(std::initializer_list<T> list)
: data_(new T[list.size()]), capacity_(list.size()), size_(0) {
for (const auto& item : list) {
push_back(item);
}
}
// 析构函数(RAII 保证内存自动释放,杜绝泄漏)
~DynamicArray() {
delete[] data_;
}
// 深拷贝构造函数
DynamicArray(const DynamicArray& other)
: data_(new T[other.capacity_]), capacity_(other.capacity_), size_(other.size_) {
std::copy(other.data_, other.data_ + size_, data_);
}
// 移动构造函数 (避免非必要拷贝)
DynamicArray(DynamicArray&& other) noexcept
: data_(other.data_), capacity_(other.capacity_), size_(other.size_) {
other.data_ = nullptr;
other.capacity_ = 0;
other.size_ = 0;
}
// 赋值运算符重载 (Copy-and-Swap 惯用法,保证强异常安全性)
DynamicArray& operator=(DynamicArray other) noexcept {
swap(other);
return *this;
}
void swap(DynamicArray& other) noexcept {
using std::swap;
swap(data_, other.data_);
swap(capacity_, other.capacity_);
swap(size_, other.size_);
}
// 尾插元素(左值重载)
void push_back(const T& value) {
if (size_ == capacity_) {
reallocate(capacity_ == 0 ? 1 : capacity_ * 2);
}
data_[size_++] = value;
}
// 尾插元素(右值重载:高效移动语义)
void push_back(T&& value) {
if (size_ == capacity_) {
reallocate(capacity_ == 0 ? 1 : capacity_ * 2);
}
data_[size_++] = std::move(value);
}
// 随机访问运算符
T& operator[](size_t index) { return data_[index]; }
const T& operator[](size_t index) const { return data_[index]; }
// 带边界检查的安全访问
T& at(size_t index) {
if (index >= size_) {
throw std::out_of_range("DynamicArray: Index out of bounds!");
}
return data_[index];
}
size_t size() const noexcept { return size_; }
size_t capacity() const noexcept { return capacity_; }
bool empty() const noexcept { return size_ == 0; }
};
int main() {
DynamicArray<int> arr = {10, 20, 30, 40};
arr.push_back(50);
std::cout << "Array Size: " << arr.size() << ", Capacity: " << arr.capacity() << "\n";
std::cout << "Elements: ";
for (size_t i = 0; i < arr.size(); ++i) {
std::cout << arr[i] << " ";
}
std::cout << std::endl;
return 0;
}
为什么这段代码对我意义非凡?
- 严格的内存生命周期管理:遵循 RAII 原则,彻底告别野指针与内存泄漏。
- 现代 C++ 规范 :巧妙运用移动语义(Move Semantics)与
Copy-and-Swap惯用法,兼顾极佳的执行效率与强异常安全性。 - 高内聚的接口设计:既保持了底层指针操作的极佳性能,又提供了安全易用的模版类封装。
五、憧憬:未来的创作与职业规划
128 天是一个阶段的终点,更是新征程的起点。站在此基石上,我对未来的技术道路充满信心:
- 深入底层与系统工程:继续深耕 C/C++ 核心原理、并发编程、系统级/高性能开发,将更多硬核理论融入工程实践。
- 创作质量全面升级 :
- 打造系列化的 C/C++ 进阶专栏,将底层原理(内存模型、模板元编程、STL 源码剖析等)用简洁优雅的语言透彻呈现。
- 持续分享高质量的工程踩坑与 Bug 排查指南,帮助更多初学者少走弯路。
- 技术社区共进:保持初心,持续输出,期待在 CSDN 的"里程碑专区"留下更多扎实而富有价值的技术脚印。
结语 :感谢每一位点赞、收藏、评论和分享代码片的朋友!感谢 CSDN 平台的记录与鼓励。技术之路漫漫,唯有热爱与坚持不可辜负。感谢遇见,你一出现,就是晴天! 🚀