السلام عليكــم ورحمـة الله وبركاتــة ،،
هل يمكن مشاركة المؤشرات فى الـ STL بدون مكتبات خارجية ؟
ويمكن تطبيقها على هذا المثال
#include <stdio.h>
#include <iostream>
#include <vector>
#include <atlstr.h>
using namespace std;
typedef class SelObjs
{
public :
vector<CString*> Items;
typedef vector<SelObjs*>::iterator iterator;
typedef vector<CString*>::size_type size_type;
public :
SelObjs() { }
SelObjs(size_type capacity)
{
this->Reserve(capacity);
}
// Destroys the SelObjs object.
~SelObjs()
{
printf("start delete ~SelObjs(%d)\r\n{\r\n", this);
// Frees all allocated resources.
vector<CString*>::iterator iter;
iter = this->Items.begin();
while(iter != this->Items.end())
{
if(*iter)
{
printf("\tdelete item(%s)\r\n", *(*iter));
delete (*iter);
}
*iter = 0;
iter = this->Items.erase(iter);
}
printf("}\r\n");
}
// Dynamically allocate the correct amount of memory.
void Reserve(size_type count)
{
this->Items.reserve(count);
}
} *LPSelObjs;
class User
{
public :
typedef vector<User*>::iterator
iterator;
CString *Name;
SelObjs *SelObjs;
vector<User*> Users;
User()
{
this->Name = 0;
this->SelObjs = 0;
}
// Destroys the User object.
~User()
{
if(0 != Name) {
printf("~User(%s)\r\n", *this->Name);
delete this->Name;
} else
printf("~User()\r\n");
this->Name = 0;
Free(this->Users);
if(0 != this->SelObjs)
delete this->SelObjs;
this->SelObjs = 0;
}
// Frees all allocated resources.
static void Free(vector<User*>& users)
{
iterator iter = users.begin();
while(iter != users.end())
{
if(*iter)
delete (*iter);
*iter = 0;
iter = users.erase(iter);
}
}
};
SelObjs *m_selObjs = 0;
int main(int argc, char* argsv[])
{
m_selObjs = new SelObjs(10);
CString *item = 0;
for(int i = 0; i < 10; i++)
{
item = new CString;
item->Format("'%d'", i);
m_selObjs->Items.push_back(item);
item = 0;
}
User *admin = new User();
admin->Name = new CString("admin");
admin->SelObjs = m_selObjs;
User *guest = new User();
guest->Name = new CString("guest");
guest->SelObjs = m_selObjs;
vector<User*> userList(2);
userList.push_back(admin);
userList.push_back(guest);
if(guest) delete guest; guest = 0;
// error because the guest was deleted or null, but guest is shared pointer.
User::Free(userList);
if(m_selObjs) delete m_selObjs; m_selObjs = 0;
cout << "Press any key to exit." << endl;
getchar(); return 0;
}حيث ان الصنف User يحتوى على مؤشرات مشتركه
المشكلة تكمن عند تحرير اى عنصر مسبقاً .