За годы практики я изучил десятки технических книг. Вот наиболее значимые, которые сформировали мой подход к разработке на C++:
Что дала:
// Пример концепции из книги:
class FileHandle {
FILE* file;
public:
explicit FileHandle(const char* name) : file(fopen(name, "r")) {
if (!file) throw std::runtime_error("File open failed");
}
```FileHandle() { if (file) fclose(file); }
// Запрет копирования
FileHandle(const FileHandle&) = delete;
FileHandle& operator=(const FileHandle&) = delete;
};
Ключевые уроки:
new
и malloc
public
наследование - это "является", а private
- "реализовано посредством"Важные моменты:
std::unique_ptr
и std::shared_ptr
constexpr
метапрограммирование// Пример из практики:
template<typename T>
constexpr auto computeHash(const T& obj) {
if constexpr (std::is_integral_v<T>) {
return obj ^ (obj << 1);
} else {
return std::hash<T>{}(obj);
}
}
Что взял на вооружение:
Главные принципы:
// До:
void p(int x) { /* ... */ }
// После:
void processPayment(int amountInCents) {
validateAmount(amountInCents);
deductFromBalance(amountInCents);
logTransaction(amountInCents);
}
Ключевые знания:
// Пример thread-safe структуры:
template<typename T>
class ThreadSafeQueue {
std::queue<T> queue;
mutable std::mutex mtx;
std::condition_variable cv;
public:
void push(T value) {
std::lock_guard lock(mtx);
queue.push(std::move(value));
cv.notify_one();
}
T pop() {
std::unique_lock lock(mtx);
cv.wait(lock, [this]{ return !queue.empty(); });
T value = std::move(queue.front());
queue.pop();
return value;
}
};
Важные уроки:
Главный урок: хорошая книга не просто учит синтаксису, а формирует образ мышления разработчика. Каждая из этих работ повлияла на мой код-стайл и подход к решению задач.