Dyzzet|
C++ Data Science Алгоритмы Темы · Блог · YouTube
Колонками
Постранично
12 марта
Полиморфная кухня — 6. Умные указатели

В C++11 появились три вида умных (интеллектуальных) указателей: std::unique_ptr, std::shared_ptr и std::weak_ptr. Они избавляют от заботы освобождать память и другие ресурсы (если с ними правильно обращаться).

struct Base
{
    virtual void print() const noexcept
    {
        std::cout << "Base (const)" << std::endl;
    }
 
    virtual void print() noexcept
    {
        std::cout << "Base" << std::endl;
    }
 
    virtual ~Base() = default;
};

Читать далее →
4 марта
День дельфийского сурка

Уникальный в каком-то смысле труд. Шесть книг по программированию. Четыре из них — по языкам Pascal и Delphi, а две другие — по языку Python. И хотя тема не C++, мимо названия «Полезное программирование» было трудно пройти, да и сам автор время от времени высказывается о C++.

ЭБС «Лань»

«Лабиринт»: Комлев

Николай Юрьевич Комлев. Полезное программирование

256 страниц. СОЛОН-пресс, 2016

Аннотация обещает сделать из читателя большого профессионала.

«Книга для тех, кто умеет программировать и уже готов этим зарабатывать.

Курс молодого, но профессионального программиста. Практические советы.

Что пригодится вам из пройденного и сданного. Что вы будете программировать сначала, а что позже, когда наберётесь опыта. К чему ещё можно применить ваш программистский талант, чтобы руководство одобрило и поощрило. Кратко, доступно, убедительно».

Читать далее →
15 февраля
Вымышленные особенности указателя this

В Рунете полно сайтов о программировании, в основном там много статей для новичков. Такие сайты могут выглядеть модно, но работа авторов и редакторов (если они вообще есть) часто недотягивает до приличного уровня.

Интересные особенности указателя this

Небольшой, но показательный пример. Автор заявляет, что «this является const указателем».

class Foo {
private:
    int x;
public:
    Foo(int x = 0) {  this->x = x; }
    void change(Foo *foo) { this = foo; }
    void print() { cout << x << endl; }
};

И никого не смутило, что компилятор прямо говорит о причине:

«Если мы запустим (скомпилируем. — DZ) код, то получим ошибку компиляции в методе change (lvalue required as left operand of assignment)».

Тип указателя this — либо Foo*, либо const Foo*. Он не может быть Foo* const или const Foo* const. А присвоить ему ничего нельзя потому, что он не является левосторонним значением (lvalue); по-простому — не может стоять слева от знака присваивания.

Читайте хорошие книги и сайты.

8 февраля
Модальные окна

Однажды понадобилось спроектировать несколько модальных окон, нужны были референсы. Я решил посмотреть на Microsoft Word, проверенный продукт. И разверзлась бездна.

Предлагаю посмотреть с небольшим количеством комментариев.

Главная

Уже первое окно показалось странным. Выравнивание блока Font разваливается.

Читать далее →
Какие специальные функции неявно объявляет компилятор?


Из выступления Говарда Хиннанта

У классов в C++03 есть специальные члены-функции: пользовательские конструкторы (custom constructors), конструктор по умолчанию (default constructor), деструктор (destructor), конструктор копирующего присваивания (copy constructor), оператор копирующего присваивания (copy assignment operator). C++11 добавляет перемещающий конструктор (move constructor) и оператор перемещающего присваивания (move assignment operator) и спецификаторы = default и = delete.

Правила, по которым компилятор неявно объявляет и удаляет такие функции, очень сложные. Есть разные версии таблиц с подсказками. Но они показывают только особенности каждой специальной функции в отдельности.


// User declares:
// Compiler implicitly declares:
9
8 7 6 5 4 3 2 1
© MMXI—MMXXIII. RSS. Поддержать сайт
Светлая тема / тёмная тема