【发布时间】:2019-02-20 17:54:00
【问题描述】:
我很抱歉再问一个新手问题,但谷歌无法帮助我(或者我只是不明白)。
我正在尝试编写一个能够存储一些简单连接数据的类。我的早期概念如下所示:
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 的正确方法是什么/em>。
我是否必须使用 new 来防止数据被删除,或者编译器是否假定以后可能会再次访问存储的结构?如果我使用 new 运算符,我必须在线程终止之前手动删除所有对象还是自动发生?
【问题讨论】:
-
我认为更好的问题是向量类是复制对象还是为其分配指针。如果是动态复制,那就不用担心了。
-
对我来说看起来不错。在您的情况下,由于您的
connectionElement仅包含一个字符串(管理自己的内存)和一个 SOCKET(整数),因此您无需担心。 -
@selbie 那么在这种情况下,实际上是否有我必须使用 new 初始化的数据类型?我怎么知道哪些要求我这样做?
-
这并没有解决问题,但是
connectionElement应该有一个接受 ip 和 soc 的构造函数。这样,addConnection就变成了connectionElement newElement(ip, soc); connections.push_back(newConnection);。甚至connections.push_back(connectionElement(ip, soc));.
标签: c++ memory-management dynamic-memory-allocation