[ C / C++ ] — начинающим: задаем вопросы (архивная - 2015)

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by _Great_, 26 May 2007.

Thread Status:
Not open for further replies.
  1. R0nin

    R0nin Member

    Joined:
    11 Jul 2010
    Messages:
    261
    Likes Received:
    24
    Reputations:
    8
    new() при алокации вызывает конструктор
    delete() вызывает десктруктор
     
  2. GRRRL Power

    GRRRL Power Elder - Старейшина

    Joined:
    13 Jul 2010
    Messages:
    823
    Likes Received:
    185
    Reputations:
    84
    Это вызывается только для классов, что логично и очень даже хорошо. А у переменных обычных нет конструктора, вызывать-то нечего.

    И кстати, не new() и delete(), а new и delete и new[] и delete[].
     
    #5582 GRRRL Power, 25 Aug 2010
    Last edited: 25 Aug 2010
  3. Bers

    Bers Member

    Joined:
    17 May 2010
    Messages:
    78
    Likes Received:
    30
    Reputations:
    26
    Только для классов. Ты вел речь про примитивные типы данных. Повторяю свой вопрос:

    Code:
    int* i = new int;
    delete i;
    
    Не будешь ли ты так добр пояснить, КАКОЙ конструктор и КАКОЙ деструктор будет в этом случае вызываться?
     
  4. R0nin

    R0nin Member

    Joined:
    11 Jul 2010
    Messages:
    261
    Likes Received:
    24
    Reputations:
    8
    я не спорю.

    sizeof() или sizeof ? :D
    шучу,можешь не отвечать ;)
     
  5. R0nin

    R0nin Member

    Joined:
    11 Jul 2010
    Messages:
    261
    Likes Received:
    24
    Reputations:
    8
    сам не видишь? Никакой.
    насчет то что сказал в первом посте о new&malloc() был не прав, конечно лучше пользоватся оператором чем функции, но как программисту C влюбом случаи мне ближе malloc().
     
  6. Bers

    Bers Member

    Joined:
    17 May 2010
    Messages:
    78
    Likes Received:
    30
    Reputations:
    26
    Вижу. Поэтому и спросил. Рад, что ты тоже сообразил.

    Рад, что ты признал свою неправоту.

    Да в общем-то это не преступление - использовать malloc/free вместо new/delete :).
    Хотя всегда есть опасность использовать malloc на классе, у которого есть конструктор по умолчанию, и получить некорректно инициализированный объект. Тут надо быть аккуратным.
     
    1 person likes this.
  7. Irdis

    Irdis Elder - Старейшина

    Joined:
    6 Feb 2006
    Messages:
    248
    Likes Received:
    52
    Reputations:
    3
    А вы вообще говоря про stl(и структуры данных) слышали?... Массивы в реальном мире применяются гораздо реже, чем тот же vector<T>(хотя можно и холиварить на эту тему).
    Многое про контейнеры можно узнать по ссылке, там вы найдёте и примеры http://www.cplusplus.com/reference/stl/.
    Банальный пример:
    Code:
    #include <vector>
    class A
    {
    public:
    	A(int i)
    	{
    	}
    };
    int main()
    {
    	std::vector<A> v;
    	for (int i = 0 ;i <100;i++)
    	{
    		v.push_back(A(i));
    	}
    }
    Хотя про HashMap и HashSet я загнул. Я думал что stl::map(set) реализован через хэш таблицу. Но оказалось, что это дерево. А вот в других языках (Ruby, Python), как я думал. Так по крайней мере говорит wiki.
    А вот stack_overflow говорит что std::hash_map добавлены в стандартные библиотеки с++0х
     
    #5587 Irdis, 25 Aug 2010
    Last edited: 25 Aug 2010
  8. GRRRL Power

    GRRRL Power Elder - Старейшина

    Joined:
    13 Jul 2010
    Messages:
    823
    Likes Received:
    185
    Reputations:
    84
    Разумеется, слышал, и использую в своих проектах. И не спорю, что реализовать можно и с использованием vector / list / deque, в зависимости от того, какой доступ требуется к элементам - последовательный или произвольный, и как будут добавляться элементы. Но конкретно в данном случае использование динамического массива также удобно - нам заранее известно число элементов при исполнении.
     
    #5588 GRRRL Power, 25 Aug 2010
    Last edited: 25 Aug 2010
  9. Ra$cal

    Ra$cal Elder - Старейшина

    Joined:
    16 Aug 2006
    Messages:
    670
    Likes Received:
    185
    Reputations:
    78
    вектор можно использовать вместо динамического с помощью финта &intsVector[0]. заранее можно выделять через resize(intRecordsNum), т.е. по сути вместо new[intRecordsNum]. Главные плюсы - нет необходимости держать в уме блок памяти, по окончании области видимости память освободится в деструкторе веткора.

    Code:
    #include <glog/logging.h>
    #include <vector>
    #include <string>
    #include <iostream>
    
    
    int employersNum()
    {
    	return 5;
    }
    
    void employersNames( std::string names [])
    {
    	for(int i = 0 ; i < employersNum(); i++){
    		names[i] = 'a' + i;
    	}
    }
    void foo()
    {
    	std::vector<std::string> names(employersNum());
    	employersNames(&names[0]);
    	for (int i = 0; i < (int)names.size(); i++){
    		std::cout << "Name: '" << names[i] << "'\n";
    	}
    }
    int main(int argc, char* argv[]) {
    	foo();
            return 0;
    }
    Как видите ни одного вызова new и delete, нет шансов забыть освободить память, сталобыть защита от утечек памяти. Для экспериментов можете сделать свой класс и в конструкторы и деструкторы засунуть выводы в консоль сообщений, кто не очень понял, как работает этот механизм. Используется принцип RAII. Еще почитайте про shared_ptr. raw указатели (точнее динамические массивы на raw указателях) в плюсах используют очень не часто. Хотя смотря конечно где. Для мелкого коленочного софта работающего несколько минут можно вообще не заморачиваться по поводу delete =)
     
    1 person likes this.
  10. Sth

    Sth New Member

    Joined:
    25 Aug 2010
    Messages:
    6
    Likes Received:
    1
    Reputations:
    5
    Мне нужен исходник:

    - Кликать по определённой ссылке без конца на определённой странице.

    // ссылки отдельной таковой нет, надо зайти на определённую страницу и там есть ссылка, и при клике на неё выходит окно с капчей. Скрипт антикапчи с атигейта могу достать. Очень нуждаюсь в данном коде.
     
  11. AlexL87

    AlexL87 New Member

    Joined:
    26 Aug 2010
    Messages:
    1
    Likes Received:
    0
    Reputations:
    0
    здравствуйте товарищи.
    Кто нить отлавливал snmp trap с устройств?
    сам читал rfc что то не врубился. Читал про протокол и как это происходит, теоретически как все генерится передается вроде понятно. А вот программно реализовать не могу :( можете поделится информацией, исходником?! (работаю в C++ Builder 6 ос-ХР)
     
  12. Qb1024

    Qb1024 New Member

    Joined:
    15 Jul 2009
    Messages:
    323
    Likes Received:
    4
    Reputations:
    0
    Так не знает тут никто про CGI?
     
  13. R0nin

    R0nin Member

    Joined:
    11 Jul 2010
    Messages:
    261
    Likes Received:
    24
    Reputations:
    8
    знает
    на C писал CGI приложения. С чем могу помочь?
     
  14. Qb1024

    Qb1024 New Member

    Joined:
    15 Jul 2009
    Messages:
    323
    Likes Received:
    4
    Reputations:
    0
    Вот это не работает((
    Помоги пожалуйста.
     
  15. SeNaP

    SeNaP Elder - Старейшина

    Joined:
    7 Aug 2008
    Messages:
    378
    Likes Received:
    69
    Reputations:
    20
    Как можно спрятать программу в диспетчере задач?
     
  16. miako

    miako Member

    Joined:
    20 Jan 2010
    Messages:
    154
    Likes Received:
    13
    Reputations:
    5
    Через хуки.
     
  17. Artist

    Artist Member

    Joined:
    10 Jul 2010
    Messages:
    89
    Likes Received:
    5
    Reputations:
    0
    Программу не спрячешь, а вот заинжектить в случайный процес можно!
     
  18. miako

    miako Member

    Joined:
    20 Jan 2010
    Messages:
    154
    Likes Received:
    13
    Reputations:
    5
    К вопросу о форматировании...работает если пишу на шарпе\си. А если html\js то что-то не хочет.
     
  19. GRRRL Power

    GRRRL Power Elder - Старейшина

    Joined:
    13 Jul 2010
    Messages:
    823
    Likes Received:
    185
    Reputations:
    84
    Раздел называется C/C++ Formatting, какой нафиг html/js, для них существуют другие редакторы вообще-то)
     
  20. miako

    miako Member

    Joined:
    20 Jan 2010
    Messages:
    154
    Likes Received:
    13
    Reputations:
    5
    VS поддерживает, почему не сделать форматирование? Насчет других редакторов...держать постоянно открытой студию + какой-нибудь html редактор, которые в основном на тормозной java. Нет уж, спасибо :)
     
Thread Status:
Not open for further replies.