我必须实现一个看起来像这样的函数:
MyList * sum (MyList * l1, MyList * l2) {
MyList * newlist = new MyList();
//Adds two objects and place the result in a third new list
return newlist;
}
Run Code Online (Sandbox Code Playgroud)
该函数采用了两个列表,并将每个对象的总和放入一个新列表中.所述MyList类曾与指针指向节点next可变的,并且该列表内的对象的用户定义被.
这让我思考 - 我该如何处理来自对象和列表本身的动态内存分配?因为我必须为新列表的每个对象创建内存.
有没有办法将对象总和的值放在新列表中而不必依赖动态分配?也许做这样的事情:
Object result(node1->content + node2->content);
Node->content = &result; // will this object be erased when the function ends?
Run Code Online (Sandbox Code Playgroud)
而不是这个:
Node->content = new Object(node1->content + node2->content);
Run Code Online (Sandbox Code Playgroud)
我应该如何处理函数内部创建的新列表的生命周期,该函数将在函数结束后保存内存的变量?返回新列表时,我可以这样做吗?
MyList & sum (MyList * l1, MyList * l2) {
//Create variable without allocating …Run Code Online (Sandbox Code Playgroud) c++ pointers memory-management dynamic-allocation dangling-pointer
我已经实现了一个简单的聊天应用程序,它接收消息并将它们重定向到所有用户,因为我正在学习并行编程。
客户端有两个线程:一个用于侦听服务器,另一个(主线程)用于写入服务器。
这些是用于实现这一点的代码:
主线:
try {
Thread listener = new Thread(new Receiver(in));
listener.start();
while (listener.isAlive()) {
out.println(stdIn.readLine());
}
out.close();
in.close();
clientSocket.close();
} catch (IOException e) {
System.err.println("Error trying to send text to server" + e.getMessage());
}
Run Code Online (Sandbox Code Playgroud)
可用于第二个线程:
public class Receiver implements Runnable {
private BufferedReader in;
public Receiver(BufferedReader serverInput) {
this.in = serverInput;
}
@Override
public void run() {
String responseLine;
try {
while ((responseLine = in.readLine()) != null) {
System.out.println(responseLine);
if (responseLine.contains("Bye")) break;
}
} catch (IOException e) { …Run Code Online (Sandbox Code Playgroud)