如何创建一个智能指针数组?

时间:2014-11-25 02:02:21

标签: 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 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>();
它给了我错误 错误1错误C2075:&#39; ConnectionArray&#39; :数组初始化需要花括号
        2 IntelliSense:使用&#39; {...}&#39;初始化期望的聚合对象

1 个答案:

答案 0 :(得分:2)

如果您知道CreateObject在编译时将返回的连接数(即NUMBER_OF_CONNECTIONS是编译时常量),则可以使用std::array< Ptr< ConnectionType >, NUMBER_OF_CONNECTIONS >std::array模拟最接近标准容器的原始数组,并且在编写现代C ++时更喜欢原始数组。如果NUMBER_OF_CONNECTIONS的大小是在运行时确定的,则可以使用std::vector< Ptr< ConnectionType > >。所以改为

#include <array>
...
std::array< Ptr< ConnectionType >, NUMBER_OF_CONNECTIONS > ConnectionArray{ CreateObject< ConnectionType >() };

#include <vector>
...
std::vector< Ptr< ConnectionType > > ConnectionArray{ CreateObject< ConnectionType >() };

另外,如果你还没有意识到,C ++ 11增加了对三种标准智能指针的支持:unique_ptrshared_ptrweak_ptr(它们的所有权不同语义)如果满足您的需求,您可能更喜欢使用自己的智能指针,并且可以使用实现它们的编译器。