C++ 如何创建智能指针数组?

C++ 如何创建智能指针数组?,c++,arrays,smart-pointers,ns-3,C++,Arrays,Smart Pointers,Ns 3,我创建了一个类,它引用一些成员作为智能指针,我想创建这个类的数组,但是我得到了不同类型的错误 class ConnectionType : public SimpleRefCount<ConnectionType> { public: Ptr<Socket> txMstrSocPtr; /// Pointer to Master tx socket Ptr<Socket> rxMstrSocPtr; /// Pointer to Master rx s

我创建了一个类,它引用一些成员作为智能指针,我想创建这个类的数组,但是我得到了不同类型的错误

class ConnectionType : public SimpleRefCount<ConnectionType> {
public:
  Ptr<Socket> txMstrSocPtr; /// Pointer to Master tx socket
  Ptr<Socket> rxMstrSocPtr; /// Pointer to Master rx socket
  Ptr<Socket> txSlavSocPtr; /// Pointer to Slave tx socket
  Ptr<Socket> rxSlavSocPtr; /// Pointer to Slave rx socket

  //ConnectionType();
  //~ConnectionType();

  void rxMstrCallBack(Ptr<Socket> socket);
  void rxSlavCallBack(Ptr<Socket> socket);
};

Ptr<ConnectionType> ConnectionArray[NUMBER_OF_CONNECTIONS] = CreateObject<ConnectionType>();
类连接类型:公共SimpleRefCount{
公众:
Ptr txMstrSocPtr;///指向主tx套接字的指针
Ptr rxMstrSocPtr;///指向主接收套接字的指针
Ptr txSlavSocPtr;///指向从属tx套接字的指针
Ptr rxSlavSocPtr;///指向从属rx套接字的指针
//ConnectionType();
//~ConnectionType();
无效rxMstrCallBack(Ptr插座);
void rxSlavCallBack(Ptr套接字);
};
Ptr ConnectionArray[连接的数量]=CreateObject();
它给了我错误 错误1错误C2075:“ConnectionArray”:数组初始化需要大括号

2 IntelliSense:聚合对象应使用“{…}”进行初始化

如果您知道编译时
CreateObject
将返回的连接数(即
number of_connections
是编译时常量),则可以使用
std::array,number of_connections>
<代码> STD::数组将标准容器的最接近的数组建模为原始数组,在编写现代C++时更倾向于原始数组。如果连接数的大小在运行时确定,则可以使用
std::vector
。那就换一个吧

#include <array>
...
std::array< Ptr< ConnectionType >, NUMBER_OF_CONNECTIONS > ConnectionArray{ CreateObject< ConnectionType >() };
#包括
...
std::数组,连接数组的数量{CreateObject()};

#包括
...
std::vector>ConnectionArray{CreateObject()};

另外,如果您还不知道,C++11还添加了对三种类型的标准智能指针的支持:
unique\u ptr
shared\u ptr
weak\u ptr
(它们的所有权语义不同)如果它们满足您的需要,并且您能够使用实现它们的编译器,那么您可能更愿意使用它们而不是您自己自制的智能指针。

您不能返回数组。您可以返回一个
向量
。您能详细地写它吗(完整的语法),对不起,我是这个领域的新手谢谢,但是当我使用数组时,它会给出一个错误,它需要一个“;”在std::array中的ConnectionArray之后,连接数>ConnectionArray{CreateObject()}@Fouda用一个标准的智能指针替换你的Ptr类,去掉一个ConnectionType类,并更改初始化语法。下面编译得很干净:+1这个解决方案对我很有效。只是想添加到此解决方案以供将来参考。”Ptr ConnectionArray[连接的数量]=CreateObject();'对于gcc版本5或更低版本运行良好。对于更高的gcc版本(这显然是推荐的方法),由@bpw1621给出的解决方案非常有效。
#include <vector>
...
std::vector< Ptr< ConnectionType > > ConnectionArray{ CreateObject< ConnectionType >() };