【发布时间】:2023-04-09 00:02:01
【问题描述】:
SharedEditor 类拥有对NetworkServer 类对象的引用,而NetworkServer 对象拥有std::vector<std::shared_ptr<SharedEditor>> 的editors。在SharedEditor 构造函数中,调用server.connect() 方法来保存其引用,而在server.connect() 中,指向该编辑器的共享指针被保存到server 中。
程序编译并执行,但严重终止。
NetworkServer.h
#include <queue>
#include <memory>
#include "SharedEditor.h"
#include "Message.h"
class NetworkServer {
private:
std::vector<std::shared_ptr<SharedEditor>> editors;
std::deque<Message> messages;
public:
int connect(std::shared_ptr<SharedEditor> sharedEditor);
};
NetworkServer.cpp
#include <algorithm>
#include "NetworkServer.h"
static int id = 0;
int NetworkServer::connect(std::shared_ptr<SharedEditor> sharedEditor) {
editors.push_back(sharedEditor);
return id++;
}
SharedEditor.h
#include <vector>
#include <map>
#include "Symbol.h"
class NetworkServer;
class SharedEditor {
private:
NetworkServer& _server;
public:
SharedEditor(NetworkServer &server);
};
SharedEditor.cpp
#include <exception>
#include <algorithm>
#include <random>
#include <iostream>
#include "SharedEditor.h"
#include "NetworkServer.h"
SharedEditor::SharedEditor(NetworkServer &server)
: _server(server), _counter(0), base(32), boundary(10) {
_siteId = server.connect(std::shared_ptr<SharedEditor>(this));
}
main.cpp
#include <iostream>
#include "NetworkServer.h"
int main() {
NetworkServer network;
SharedEditor ed1(network);
SharedEditor ed2(network);
return 0;
}
返回-1073740940 (0xC0000374)
【问题讨论】:
标签: c++ reference shared-ptr circular-dependency