C ++适当的结构初始化

浮点数

很抱歉问另一个新手问题,但是Google不能完全帮助我(或者我只是听不懂)。

我正在尝试编写一个能够存储一些简单连接数据的类。我的早期概念如下所示:

struct connectionElement{
 string ip;
 SOCKET soc;
};

class ConnectionData{
 private:
  vector<connectionElement> connections;

 public:
  ConnectionData();
  ~ConnectionData();

  void addConnection(string ip, SOCKET soc);
};

void ConnectionData::addConnection(string ip, SOCKET soc) {
 connectionElement newElement;
 newElement.ip = ip;
 newElement.soc = soc;
 connections.push_back(newElement);
 return;
}

现在,我读到一旦代码到达作用域的末尾,不使用new初始化的对象将被释放。因此,由于我是一名Java专家,并且对内存分配不了解shi *,所以我想知道addConnection()中初始化新的connectionElement的正确方法是什么

我是否必须使用new来防止数据被删除,或者编译器是否假定以后可以再次访问存储的结构?如果我使用new运算符,是否必须在线程终止之前手动删除所有对象,否则该操作会自动发生吗?

润滑脂

我是否必须使用new来防止数据被删除,或者编译器是否假定以后可以再次访问存储的结构?

不,在您的代码段中,该类ConnectionData拥有其数据成员connections,向量中的元素按值存储。因此,connections只要它拥有的类实例存在它就存在:

void someFunctionInYourProgram()
{
    ConnectionData example{};

    example.addConection(/* ... */);

    // do stuff with the ConnectionData instance and its connections

    void doMoreStuffWith(example);

 } // Now, example went out of scope, everything is automatically cleaned up.

如果我使用new运算符,是否必须在线程终止之前手动删除所有对象,否则该操作会自动发生吗?

如果您用分配对象new并且不将返回的原始指针传递给某个智能poiter来进行删除,则必须使用手动进行清理delete但是,不应该有太多的情况下适用,因为std::shared_ptrstd::unique_ptr在那里的救援,他们用船std::make_sharedstd::make_unique,甚至使其过时的手动调用new操作。

关于此代码段的最后一点

connectionElement newElement;
newElement.ip = ip;
newElement.soc = soc;
connections.push_back(newElement);

您可以简化为

connections.push_back({ip, soc});

这可能会保存副本结构(如果编译器尚未对其进行优化)。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章