Добавить в очередь без вызова деструктора - PullRequest
0 голосов
/ 10 января 2012

У меня есть этот класс:

class user
{
private:
    string userid;
    string password;
public:
    user(){};
    user(string a, string b){userid = a; password = b;}
    ~user(){cout<<"Trace";};
    void    print ( ostream& out );
};

Каждый раз, когда я пытаюсь добавить свою очередь таким образом, aqueue.append(user(userid, password); она добавляется в мою очередь, но впоследствии вызывает деструктор. Очередь представляет собой базовый общий связанный список, указывающий на следующую ячейку. Мой вопрос: как добавить класс в очередь, не вызывая деструктор каждый раз?

Ответы [ 2 ]

1 голос
/ 10 января 2012

Похоже, вы создаете объект в стеке и отправляете его в очередь для добавления.И поскольку очередь принимает объект (не указатель или ссылку), она может глубоко копировать объект, а когда область действия исходного объекта будет закончена, она будет удалена (уничтожена).

создайте объект с помощью оператора new в куче и затем передайте егоиспользуя ссылку или указатель.

1 голос
/ 10 января 2012

Храните указатели (например, необработанные указатели, std::auto_ptr, std::unique_ptr) на объекты, которые вы хотите сохранить, а не на сами объекты.

...