передача указателя на объект
От: Аноним  
Дата: 10.05.11 09:52
Оценка:
Привет!
Есть код:
class base
{
    public:
        void set_name(const std::string& interface_name);
        const std::string& get_name() const;

    protected:
        std::string name;
};

class derived_1 : public base
{
    public:
        void foo()
};

class derived_2 : public base
{
    public:
        void foo()
};

vector<base*> obj_vec;

void register_obj(base* p_new_obj)
{
    obj_vec.push_back(p_new_obj);
}

base* get_obj_by_name(string& obj_name)
{
    vector<base*>::iterator obj_it = find_if(
        obj_vec.begin(), obj_vec.end(),
        [&obj_name](const base* p_curr_obj) {
            return (p_curr_obj->get_name() == obj_name);
            }
        );

    if (obj_it != obj_vec.end())
        return (*obj_it);

    return nullptr;
}

void main()
{
    derived_2* p_new_obj = new derived_2;
    p_new_obj->set_name("my_obj");

    register_obj(p_new_obj);
    p_new_obj = reinterpret_cast<derived_2*>(get_obj_by_name("my_obj"));

}


Проблема в том, при вызове register_obj в функцию передается не указатель p_new_obj, а почему-то p_new_obj+4. Соответственно get_obj_by_name тоже возвращает не то, что нужно, т.к. в вектор obj_vec попал неверный указатель. Почему так происходит?
наследование
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.