Форум программистов, компьютерный форум CyberForum.ru

Умный указатель - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Литературка по формам http://www.cyberforum.ru/cpp-beginners/thread930352.html
Вобщем я студент - уже 2 курса. Изучал делфи и с++ на консольном уровне. с++ дошли до СТЛ включительно. Летом решил посидеть на делфи, т.к ооп у нас будет весь 2 курс - делфи, немного разобрался сделал несколько приложений с использованием форм. захотел обратно перейти на с++ и продолжить изучение. когда то качал книги( решил почитать ету "Харви и Пол Дейтл - Как программировать на С++"...
C++ Посоветуйте книгу по С++ Я знаю, есть список, где рассказано что лучше читать. Попробовал книгу Страуструпа(которую нашел в этом же списке). Впал в уныние после первого его "калькулятора". Из опыта у меня есть только курсовой, где мы маялись с таблицами и контейнерами (кстати контейнер vector мы ,почему-то, даже не задевали). Как я понял, книги Страуструпа - это не те книги, с которых лучше начинать обучение...... http://www.cyberforum.ru/cpp-beginners/thread930347.html
Вырезка части изображения по двум точкам C++
Задача вырезать часть матрицы изображения по двум точкам(верхниму-левом и правому нижнему). P.S. работаю c libtiff. тестирую в qt. Изображение 8bit'е Функция вырезки bool TiffFile::Read(const char *fileName, int x1, int y1, int x2, int y2) { tif=TIFFOpen(fileName,"r"); if(tif) { int compression=0; int planar=0;
C++ Форма записи с использованием "?" знака
#include <iostream> int main() { int a = 0; int b = 0; int res = 0; std::cin >> a >> b; res = (a > 0 && b < 10) ? a: 100;
C++ Что лучше использовать, #define или typedef? http://www.cyberforum.ru/cpp-beginners/thread930323.html
Вот привожу пример программы. Здесь можно и с #define сделать и с typedef. Программа в любом случае будет прекрасно работать. Там что же использовать? //#define ui unsigned int typedef unsigned int ui; int main() { ui n = 5;
C++ Доступ к памяти по адресу Есть структура, элементы которой адрес на начало массива в памяти и его размер. Адреса хранятся в 16-ричном формате. Мне нужно распечатать то, что лежит в этом массиве. for (int i = 0; i <= ((int)(current->_size)); i++) { TraceFile << (current->_address)<<endl; } (current->_address) - некорректно, не могу придумать, как сделать иначе подробнее

Показать сообщение отдельно
Olivеr
 Аватар для Olivеr
411 / 407 / 13
Регистрация: 06.10.2011
Сообщений: 830
29.07.2013, 18:01     Умный указатель
примерно вот так...
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
#include <iostream>
#include <functional>
 
template <class T>
class unique_ptr
{
    using pointer = T*;
    using reference = T&;
    using Deleter = std::function<void(pointer)>;
 
    pointer ptr;
    Deleter deleter;
 
    struct default_deleter
    { void operator () (pointer p) { delete p; } };
 
public:
    unique_ptr() noexcept : ptr(nullptr), deleter(default_deleter()) {}
 
    unique_ptr(pointer p, Deleter del = default_deleter()) : ptr(p), deleter(del) {}
 
    unique_ptr(const unique_ptr&) = delete;
 
    unique_ptr(unique_ptr &&x) noexcept : ptr(x.ptr), deleter(x.deleter)
    {
        x.ptr = nullptr;
    }
 
    ~unique_ptr()
    {
        deleter(ptr);
    }
 
    unique_ptr& operator = (const unique_ptr&) = delete;
 
    unique_ptr& operator = (unique_ptr &&x) noexcept
    {
        ptr = x.ptr;
        x.ptr = nullptr;
        deleter = x.deleter;
        return *this;
    }
 
    reference operator * () const
    {
        return *ptr; // !!! *nullptr
    }
 
    pointer operator -> () const noexcept
    {
        return ptr;
    }
 
    pointer get() const noexcept
    {
        return ptr;
    }
 
    void reset(pointer p = nullptr) noexcept
    {
        this->~unique_ptr();
        ptr = p;
    }
 
    pointer release() noexcept
    {
        pointer p = ptr;
        ptr = nullptr;
        return p;
    }
};
 
struct Foo
{
    ~Foo() {std::cout << "~Foo\n";};
};
 
int main()
{
    unique_ptr<Foo> p1( new Foo );
    unique_ptr<Foo> p2(new Foo[10], [](Foo *p){delete[] p;});
    return 0;
}
 
Текущее время: 20:58. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru