بنقرة واحدة
c
当进行C++开发、性能优化、内存管理或现代C++应用时,分析代码质量、设计模式和最佳实践。
التثبيت باستخدام Codex أو Claude انسخ هذا Prompt والصقه في Codex أو Claude أو مساعد آخر ليراجع صفحة Skill ويثبّتها لك.
القائمة
当进行C++开发、性能优化、内存管理或现代C++应用时,分析代码质量、设计模式和最佳实践。
التثبيت باستخدام Codex أو Claude انسخ هذا Prompt والصقه في Codex أو Claude أو مساعد آخر ليراجع صفحة Skill ويثبّتها لك.
استنادا إلى تصنيف SOC المهني
以聚合根为边界,包含多个相关Entity和ValueObject的集合。保证数据一致性和事务边界。
在DDD中具有唯一身份标识和生命周期的对象,通过身份而非属性值相等判断。
封装复杂对象和聚合的创建过程,将创建职责从领域对象中剥离,保证聚合创建时的不变量满足。
没有身份标识,通过属性值判断相等的对象。不可变,通常代表领域中的度量或描述。
命令查询责任分离,将数据的写入操作和读取操作分别用不同的模型处理,优化各自的性能。
将DDD战略设计应用于微服务架构,限界上下文指导服务拆分,领域事件实现服务间通信。
| name | C++编程 |
| description | 当进行C++开发、性能优化、内存管理或现代C++应用时,分析代码质量、设计模式和最佳实践。 |
| license | MIT |
C++是高度灵活且强大的语言,支持多种编程范式。现代C++(C++11及以后)引入了大量改进的特性,使得代码更安全、更高效。不当的指针使用、资源管理和设计会导致内存泄漏、性能问题和代码难以维护。
核心原则: 好的C++代码应该高效安全、资源管理清晰、易于维护、充分利用现代特性。坏的C++代码会内存泄漏、性能低下、代码混乱。
始终:
触发短语:
问题: 智能指针循环引用
原因: shared_ptr之间互相引用
解决: 使用weak_ptr打破循环引用或重新设计所有权
问题: 混合使用裸指针和智能指针
原因: 新旧代码混合
解决: 逐步迁移到智能指针,避免混合使用
问题: 异常安全问题
原因: 不遵循RAII原则
解决: 确保所有资源在构造函数初始化,析构函数清理
问题: 过度复制和不必要的内存分配
原因: 没有使用移动语义和引用
解决: 使用std::move、右值引用和移动构造
问题: 虚函数开销
原因: 过度使用虚函数或热点代码路径
解决: 性能分析,避免关键路径使用虚函数
#include <memory>
#include <vector>
// 使用智能指针而不是裸指针
class DataManager {
private:
std::unique_ptr<int[]> data;
std::vector<std::shared_ptr<std::string>> strings;
public:
DataManager(size_t size)
: data(std::make_unique<int[]>(size)) {}
// 析构函数自动释放资源(虽然这里不需要显式写出来)
~DataManager() = default;
// 添加字符串
void add_string(const std::string& str) {
strings.push_back(std::make_shared<std::string>(str));
}
// 获取字符串数量
size_t string_count() const {
return strings.size();
}
};
// 使用示例
int main() {
auto manager = std::make_unique<DataManager>(100);
manager->add_string("Hello");
manager->add_string("World");
// 自动清理,无需手动delete
return 0;
}
#include <algorithm>
#include <vector>
#include <iostream>
void lambda_and_algorithm_demo() {
std::vector<int> nums = {3, 1, 4, 1, 5, 9, 2, 6};
// 排序
std::sort(nums.begin(), nums.end());
// 使用lambda过滤
auto even_count = std::count_if(
nums.begin(),
nums.end(),
[](int n) { return n % 2 == 0; }
);
std::cout << "Even numbers: " << even_count << std::endl;
// 使用lambda转换
std::vector<int> squared;
std::transform(
nums.begin(),
nums.end(),
std::back_inserter(squared),
[](int n) { return n * n; }
);
// 范围for循环(C++11)
for (int num : squared) {
std::cout << num << " ";
}
std::cout << std::endl;
}
#include <fstream>
#include <iostream>
// RAII - Resource Acquisition Is Initialization
class FileHandler {
private:
std::ifstream file;
public:
// 构造函数获取资源
explicit FileHandler(const std::string& filename)
: file(filename) {
if (!file.is_open()) {
throw std::runtime_error("Cannot open file: " + filename);
}
}
// 析构函数释放资源
~FileHandler() {
if (file.is_open()) {
file.close();
}
}
// 删除复制
FileHandler(const FileHandler&) = delete;
FileHandler& operator=(const FileHandler&) = delete;
// 支持移动
FileHandler(FileHandler&& other) noexcept
: file(std::move(other.file)) {}
FileHandler& operator=(FileHandler&& other) noexcept {
if (this != &other) {
file = std::move(other.file);
}
return *this;
}
// 读取内容
std::string read_all() {
return std::string((std::istreambuf_iterator<char>(file)),
std::istreambuf_iterator<char>());
}
};
// 使用示例
int main() {
try {
FileHandler handler("data.txt");
std::string content = handler.read_all();
std::cout << content << std::endl;
} catch (const std::exception& e) {
std::cerr << e.what() << std::endl;
}
// 文件自动关闭
return 0;
}
#include <iostream>
#include <utility>
// 通用的日志函数
template<typename... Args>
void log(const char* format, Args&&... args) {
// 这是一个演示,实际应该使用更复杂的格式化
std::cout << format << std::endl;
}
// 使用示例
int main() {
log("Simple message");
int value = 42;
log("Value: ", value);
return 0;
}
#include <thread>
#include <mutex>
#include <atomic>
#include <vector>
class ThreadSafeCounter {
private:
mutable std::mutex mtx;
int count = 0;
public:
void increment() {
std::lock_guard<std::mutex> lock(mtx);
count++;
}
int get_value() const {
std::lock_guard<std::mutex> lock(mtx);
return count;
}
};
// 使用示例
int main() {
ThreadSafeCounter counter;
auto worker = [&counter]() {
for (int i = 0; i < 1000; ++i) {
counter.increment();
}
};
std::vector<std::thread> threads;
for (int i = 0; i < 4; ++i) {
threads.emplace_back(worker);
}
for (auto& t : threads) {
t.join();
}
std::cout << "Final count: " << counter.get_value() << std::endl;
return 0;
}