为什么向量<T>push_back<shared_ptr>不能在我定义的类的 for 循环中工作

why vector push_back<shared_ptr<T>> not work in a for loop for my defined class

本文关键字:gt lt 工作 定义 for 循环 shared push 向量 back 为什么      更新时间:2023-10-16

我想使用std::vector。Push_bask在for循环中存储20个shared_ptr数字。但从输出来看:它似乎只推了一个。并且vector::push_back> 20次均按设计工作。

有人能帮我一下吗?

class IObserver{
public:
    int virtual  notify() = 0;
};
class CAdsUser
{
public:
    int do_ads() {cout << __FUNCTION__<<endl;m_observer->notify(); return 0;}
    CAdsUser(tr1::shared_ptr<IObserver> b):m_observer(b){cout << __PRETTY_FUNCTION__<<endl;};
    ~CAdsUser() {cout << __PRETTY_FUNCTION__<<endl;}
private:
    tr1::shared_ptr<IObserver> m_observer;
};
class CMgr:public IObserver
{
public:
    int virtual notify() { cout << __PRETTY_FUNCTION__<<endl; return 0;};
    virtual ~CMgr(){cout << __PRETTY_FUNCTION__<<endl;};
};
using namespace std;
typedef vector<tr1::shared_ptr<CAdsUser> >VecType;
int main() {
    tr1::shared_ptr<CMgr> g(new CMgr());
    VecType m_online_user;
    int i = 0;
    for(i = 0; i < 20; i++);
    {
        tr1::shared_ptr<CAdsUser> ads_temp(new CAdsUser(g));
        cout <<&ads_temp<<endl;
        m_online_user.push_back((ads_temp));
        //m_online_user.insert(m_online_user.begin(),1,ads_temp);
    }
    tr1::shared_ptr<CAdsUser> ads_temp1(new CAdsUser(g));
    cout <<&ads_temp1<<endl;
    m_online_user.push_back(ads_temp1);
    /// CAdsUser *p =  m_online_user[7];
    VecType::iterator vi;
    for(vi = m_online_user.begin();vi != m_online_user.end(); vi++)
        (*vi)->do_ads();
    vector<tr1::shared_ptr<string> > test_string;
    for(i = 0; i< 20; i++)
    {
        tr1::shared_ptr<string> temp(new string());
        temp->append("sdfsdfsfd");
        test_string.push_back(temp);
    }
    vector<tr1::shared_ptr<string> >::iterator vs;
    for(vs = test_string.begin();vs != test_string.end(); vs++)
        cout<<*(*vs)<<endl;
    return 0;
}

程序输出:

CAdsUser::CAdsUser(std::tr1::shared_ptr<IObserver>)
0xbfbf3084
CAdsUser::CAdsUser(std::tr1::shared_ptr<IObserver>)
0xbfbf30a0
do_ads
virtual int CMgr::notify()
do_ads
virtual int CMgr::notify()
sdfsdfsfd
sdfsdfsfd
sdfsdfsfd
sdfsdfsfd
sdfsdfsfd
sdfsdfsfd
sdfsdfsfd
sdfsdfsfd
sdfsdfsfd
sdfsdfsfd
sdfsdfsfd
sdfsdfsfd
sdfsdfsfd
sdfsdfsfd
sdfsdfsfd
sdfsdfsfd
sdfsdfsfd
sdfsdfsfd
sdfsdfsfd
sdfsdfsfd
CAdsUser::~CAdsUser()
CAdsUser::~CAdsUser()
virtual CMgr::~CMgr()
for(i = 0; i < 20; i++);
                    // ^ this little guy is killing you

去掉;,你得到了一个空体的for循环