nataraj: (Default)
[personal profile] nataraj
Поскольку не силен в новомодном C++, реквестирую помощь зала...
for ( /* Some loop*/)
{
   /*Some other actions */
    pluginInfo info;

    info.name       = "что-то";
    info.filePath    = "еще что-то";
    /*Ну и далее заполняем стрктуру*/

   plugins.push_back(info);
}

    for (vector<pluginInfo>::iterator itp = plugins.begin(); itp != plugins.end(); ++itp){
        create((*itp));
     }


info - банальная структура.
plugins - vector
Я плохо ориентируюсь в темплейтах... Потому спрашиваю:
Правильно ли я понимаю, что эта конструкция не безопасная, из-за того что по завершению каждой итерации цикла память из под info -- освобождается, и в ней может оказаться что угодно?
Или тут все верно? (У меня просто одно из полей info значение меняет с false на true без объявления войны, на пустом месте) Грешу именно на то как оно в список попадает...

Date: 2009-09-04 06:27 pm (UTC)
lodin: A bearded hacker in a hat (Default)
From: [personal profile] lodin
Написал тест:

#include  
#include  

using namespace std;

struct test {
        int val;
};

int main () {
        test t;
        vector v;
        t.val = 1;
        v.push_back (t);
        t.val = 2;
        cout << v[0].val << "\n";
        return 0;
};

Что бы мы там ни делали с t, а внутри v осталось то значение, которое было. Т.е. данные скопированы в безопасное место.

Date: 2009-09-04 06:28 pm (UTC)
lodin: A bearded hacker in a hat (Default)
From: [personal profile] lodin
следует читать:
vector<test> v;

Date: 2009-09-04 07:30 pm (UTC)
From: [identity profile] gorokhova.livejournal.com
если меня кто спросит за чистоту языка- у меня теперь есть чем отмахиваться))))

Date: 2009-09-05 07:55 am (UTC)
From: [identity profile] wrar.livejournal.com
push_back вроде всё-таки копию делает.
А вообще valgrind такое вроде отлавливает.

Date: 2009-09-18 07:13 am (UTC)
ext_605364: geg MOPO4 (Default)
From: [identity profile] gegmopo4.livejournal.com
Неправильно. Верно.

push_back() помещает в коллекцию копию. Иногда, если копирование дорого (или лень возиться с правильной его реализацией), прибегают к следующей идиоме:
plugins.push_back(pluginInfo());
pluginInfo const & info = plugins.back();
info.name = "что-то";
...
В этом случае info является ссылкой на экземпляр в коллекции.

Profile

nataraj: (Default)
Swami Dhyan Nataraj

July 2024

S M T W T F S
 123456
789 10111213
14151617181920
21222324252627
28293031   

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Jan. 21st, 2026 04:48 pm
Powered by Dreamwidth Studios