Xin chào, tôi đã hỏi một câu hỏi hôm nay về Cách chèn các loại đối tượng khác nhau trong cùng một mảng vectơ và mã của tôi trong câu hỏi đó là
gate* G[1000];
G[0] = new ANDgate() ;
G[1] = new ORgate;
//gate is a class inherited by ANDgate and ORgate classes
class gate
{
.....
......
virtual void Run()
{ //A virtual function
}
};
class ANDgate :public gate
{.....
.......
void Run()
{
//AND version of Run
}
};
class ORgate :public gate
{.....
.......
void Run()
{
//OR version of Run
}
};
//Running the simulator using overloading concept
for(...;...;..)
{
G[i]->Run() ; //will run perfectly the right Run for the right Gate type
}
và tôi muốn sử dụng vectơ nên ai đó đã viết rằng tôi nên làm như vậy:
std::vector<gate*> G;
G.push_back(new ANDgate);
G.push_back(new ORgate);
for(unsigned i=0;i<G.size();++i)
{
G[i]->Run();
}
nhưng sau đó anh ấy và nhiều người khác gợi ý rằng tôi nên sử dụng vùng chứa con trỏ Boost
hoặc shared_ptr
. Tôi đã dành 3 giờ qua để đọc về chủ đề này, nhưng tài liệu có vẻ khá nâng cao đối với tôi. **** Bất cứ ai có thể cho tôi một ví dụ mã nhỏ về shared_ptr
cách sử dụng và lý do tại sao họ đề xuất sử dụng shared_ptr
. Ngoài ra còn có các loại khác như ptr_vector
, ptr_list
và ptr_deque
**
Chỉnh sửa1: Tôi cũng đã đọc một ví dụ mã bao gồm:
typedef boost::shared_ptr<Foo> FooPtr;
.......
int main()
{
std::vector<FooPtr> foo_vector;
........
FooPtr foo_ptr( new Foo( 2 ) );
foo_vector.push_back( foo_ptr );
...........
}
Và tôi không hiểu cú pháp!
main
tạo một vectơ có thể chứa các con trỏ dùng chung đến một kiểu được gọi làFoo
; cái thứ hai tạo một con trỏFoo
sử dụngnew
và dùng chung để quản lý nó; thứ ba đặt một bản sao của con trỏ dùng chung vào vector.