C++ 附加到队列而不调用析构函数
我有这门课:C++ 附加到队列而不调用析构函数,c++,queue,linked-list,C++,Queue,Linked List,我有这门课: 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 ); }; 类用户 { 私人: 字符串用户标识; 字符串密码
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 );
};
类用户
{
私人:
字符串用户标识;
字符串密码;
公众:
user(){};
用户(字符串a,字符串b){userid=a;password=b;}
~user(){cout将指针(例如原始指针,std::auto_ptr
,std::unique_ptr
)存储到要存储的对象,而不是对象本身。看起来您正在堆栈中创建对象并将其传递到队列进行追加。
当队列接受对象(不是指针或引用)时,它可能会深度复制对象&当原始对象的作用域完成时,它将被删除(销毁)
使用堆上的新运算符创建对象,然后使用引用或指针传递对象。假设您的队列的工作方式类似于std::queue
,则不能。您将对象复制到队列中,原始对象将被销毁。这似乎与您处理队列时所采用的方法相同。@BillyONeal我可以用指针解决这个问题吗?@Joe:是的;但是额外的内存分配将花费远不止几个析构函数调用。(老实说,在大多数情况下,链表都是一种可怕的数据结构;最好使用类似std::deque或循环缓冲区的方式)调用析构函数有什么问题?队列是您自己的类还是STL?