Просмотр исходного кода

用boost::make_shared创建对象

tanghai 14 лет назад
Родитель
Сommit
8ec5ad4034

+ 3 - 1
Cpp/CMakeLists.txt

@@ -54,7 +54,7 @@ IF(PROFILE)
 	SET(ThirdPartyLibs ${ThirdPartyLibs} ${PERFTOOLS_PROFILE_LIBRARIES})
 ENDIF()
 
-IF(MSVC)
+IF(WIN32)
 	SET(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} /MTd /Zi /WX /wd4244 /wd4267 /wd4018 /wd4355 /wd4800 /wd4251 /wd4996 /wd4146 /wd4305 /wd4819")
 	SET(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} /NODEFAULTLIB:libc.lib")
 	SET(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} /NODEFAULTLIB:libcmt.lib")
@@ -63,6 +63,8 @@ IF(MSVC)
 	SET(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} /NODEFAULTLIB:msvcrtd.lib")
 	SET(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} /NODEFAULTLIB:msvcprtd.lib")
 	ADD_DEFINITIONS(-DBOOST_ALL_NO_LIB -D_WIN32_WINNT=0x0601 -DGLOG_NO_ABBREVIATED_SEVERITIES -DGOOGLE_GLOG_DLL_DECL= -DGFLAGS_DLL_DECL= -DGFLAGS_DLL_DECLARE_FLAG= -DGFLAGS_DLL_DEFINE_FLAG=)
+ELSEIF(UNIX)
+	SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++0x")
 ENDIF()
 
 ADD_SUBDIRECTORY(Platform)

+ 3 - 2
Cpp/Platform/Python/PythonInterpreterTest.cc

@@ -1,7 +1,8 @@
+#include <boost/python.hpp>
+#include <boost/make_shared.hpp>
 #include <gtest/gtest.h>
 #include <glog/logging.h>
 #include <gflags/gflags.h>
-#include <boost/python.hpp>
 #include "Python/PythonInterpreter.h"
 
 namespace Egametang {
@@ -71,7 +72,7 @@ TEST_F(PythonInterpreterTest, EnterPythonScript)
 	interpreter.ImportPath("../../../Cpp/Platform/Python/");
 	interpreter.ImportModule("PythonInterpreterTest");
 
-	PersonTestPtr person(new PersonTest);
+	PersonTestPtr person = boost::make_shared<PersonTestPtr>();
 	interpreter.RegisterObjectPtr("person", person);
 
 	ASSERT_EQ(0, person->Guid());

+ 3 - 2
Cpp/Platform/Rpc/ResponseHandler.cc

@@ -1,3 +1,4 @@
+#include <boost/make_shared.hpp>
 #include "Rpc/MethodInfo.h"
 #include "Rpc/ResponseHandler.h"
 #include "Rpc/RpcCommunicator.h"
@@ -36,8 +37,8 @@ google::protobuf::Message* ResponseHandler::Response()
 
 void ResponseHandler::Run()
 {
-	RpcMetaPtr meta(new RpcMeta());
-	StringPtr message(new std::string);
+	RpcMetaPtr meta = boost::make_shared<RpcMeta>();
+	StringPtr message = boost::make_shared<std::string>();
 	response->SerializeToString(message.get());
 	meta->id = id;
 	meta->size = message->size();

+ 6 - 5
Cpp/Platform/Rpc/RpcClient.cc

@@ -1,5 +1,6 @@
 #include <boost/asio.hpp>
 #include <boost/bind.hpp>
+#include <boost/make_shared.hpp>
 #include <google/protobuf/message.h>
 #include <google/protobuf/descriptor.h>
 #include "Rpc/RpcCommunicator.h"
@@ -30,8 +31,8 @@ void RpcClient::OnAsyncConnect(const boost::system::error_code& err)
 	{
 		return;
 	}
-	RpcMetaPtr recvMeta(new RpcMeta());
-	StringPtr recvMessage(new std::string);
+	RpcMetaPtr recvMeta = boost::make_shared<RpcMeta>();
+	StringPtr recvMessage = boost::make_shared<std::string>();
 	RecvMeta(recvMeta, recvMessage);
 }
 
@@ -70,13 +71,13 @@ void RpcClient::CallMethod(
 {
 	if (!done)
 	{
-		RequestHandlerPtr request_handler(new RequestHandler(response, done));
+		RequestHandlerPtr request_handler = boost::make_shared<RequestHandler>(response, done);
 		requestHandlers[++id] = request_handler;
 	}
 	boost::hash<std::string> stringHash;
-	StringPtr message(new std::string);
+	StringPtr message = boost::make_shared<std::string>();
 	request->SerializePartialToString(message.get());
-	RpcMetaPtr meta(new RpcMeta());
+	RpcMetaPtr meta = boost::make_shared<RpcMeta>();
 	meta->size = message->size();
 	meta->id = id;
 	meta->method = stringHash(method->full_name());

+ 5 - 5
Cpp/Platform/Rpc/RpcClientTest.cc

@@ -39,8 +39,8 @@ public:
 		{
 			return;
 		}
-		RpcMetaPtr meta(new RpcMeta());
-		StringPtr message(new std::string);
+		RpcMetaPtr meta = boost::make_shared<RpcMeta>();
+		StringPtr message = boost::make_shared<std::string>();
 		RecvMeta(meta, message);
 	}
 
@@ -60,9 +60,9 @@ public:
 		EchoResponse response;
 		response.set_num(num);
 
-		StringPtr responseMessage(new std::string);
+		StringPtr responseMessage = boost::make_shared<std::string>();
 		response.SerializeToString(responseMessage.get());
-		RpcMetaPtr responseMeta(new RpcMeta());
+		RpcMetaPtr responseMeta = boost::make_shared<RpcMeta>();
 		responseMeta->id = meta->id;
 		responseMeta->size = responseMessage->size();
 		SendMeta(responseMeta, responseMessage);
@@ -99,7 +99,7 @@ TEST_F(RpcClientTest, Echo)
 
 	CountBarrier barrier(2);
 	RpcServerTest server(ioServer, port, barrier);
-	RpcClientPtr client(new RpcClient(ioClient, "127.0.0.1", port));
+	RpcClientPtr client = boost::make_shared<RpcClient>(ioClient, "127.0.0.1", port);
 	EchoService_Stub service(client.get());
 
 	boost::threadpool::fifo_pool threadPool(2);

+ 11 - 8
Cpp/Platform/Rpc/RpcCommunicatorTest.cc

@@ -1,6 +1,7 @@
 #include <boost/bind.hpp>
 #include <boost/asio.hpp>
 #include <boost/threadpool.hpp>
+#include <boost/make_shared.hpp>
 #include <gtest/gtest.h>
 #include <glog/logging.h>
 #include <gflags/gflags.h>
@@ -43,8 +44,8 @@ public:
 			return;
 		}
 
-		RpcMetaPtr meta(new RpcMeta());
-		StringPtr message(new std::string);
+		RpcMetaPtr meta = boost::make_shared<RpcMeta>();
+		StringPtr message = boost::make_shared<std::string>();
 		RecvMeta(meta, message);
 	}
 
@@ -64,8 +65,9 @@ public:
 		recvMessage = *message;
 		recvMeta = *meta;
 
-		RpcMetaPtr responseMeta(new RpcMeta());
-		StringPtr response_message(new std::string("response test rpc communicator string"));
+		RpcMetaPtr responseMeta = boost::make_shared<RpcMeta>();
+		StringPtr response_message = boost::make_shared<std::string>(
+				"response test rpc communicator string");
 		responseMeta->size = response_message->size();
 		responseMeta->method = 123456;
 		SendMeta(responseMeta, response_message);
@@ -114,14 +116,15 @@ public:
 			return;
 		}
 
-		RpcMetaPtr sendMeta(new RpcMeta());
-		StringPtr sendMessage(new std::string("send test rpc communicator string"));
+		RpcMetaPtr sendMeta = boost::make_shared<RpcMeta>();
+		StringPtr sendMessage = boost::make_shared<std::string>(
+				"send test rpc communicator string");
 		sendMeta->size = sendMessage->size();
 		sendMeta->method = 654321;
 		SendMeta(sendMeta, sendMessage);
 
-		RpcMetaPtr meta(new RpcMeta());
-		StringPtr message(new std::string);
+		RpcMetaPtr meta = boost::make_shared<RpcMeta>();
+		StringPtr message = boost::make_shared<std::string>();
 		RecvMeta(meta, message);
 	}
 

+ 6 - 5
Cpp/Platform/Rpc/RpcServer.cc

@@ -1,6 +1,7 @@
 #include <boost/asio.hpp>
 #include <boost/foreach.hpp>
 #include <boost/bind.hpp>
+#include <boost/make_shared.hpp>
 #include <google/protobuf/service.h>
 #include <google/protobuf/descriptor.h>
 #include "Base/Marcos.h"
@@ -24,7 +25,7 @@ RpcServer::RpcServer(boost::asio::io_service& service, int port):
 	acceptor.set_option(boost::asio::ip::tcp::acceptor::reuse_address(true));
 	acceptor.bind(endpoint);
 	acceptor.listen();
-	RpcSessionPtr new_session(new RpcSession(ioService, *this));
+	RpcSessionPtr new_session = boost::make_shared<RpcSession>(ioService, *this);
 	acceptor.async_accept(new_session->Socket(),
 			boost::bind(&RpcServer::OnAsyncAccept, this,
 					new_session, boost::asio::placeholders::error));
@@ -42,7 +43,7 @@ void RpcServer::OnAsyncAccept(RpcSessionPtr session, const boost::system::error_
 	}
 	session->Start();
 	sessions.insert(session);
-	RpcSessionPtr newSession(new RpcSession(ioService, *this));
+	RpcSessionPtr newSession = boost::make_shared<RpcSession>(ioService, *this);
 	acceptor.async_accept(newSession->Socket(),
 			boost::bind(&RpcServer::OnAsyncAccept, this,
 					newSession, boost::asio::placeholders::error));
@@ -67,8 +68,8 @@ void RpcServer::RunService(RpcSessionPtr session, RpcMetaPtr meta,
 {
 	MethodInfoPtr methodInfo = methods[meta->method];
 
-	ResponseHandlerPtr responseHandler(
-			new ResponseHandler(methodInfo, meta->id, messageHandler));
+	ResponseHandlerPtr responseHandler =
+			boost::make_shared<ResponseHandler>(methodInfo, meta->id, messageHandler);
 	responseHandler->Request()->ParseFromString(*message);
 
 	google::protobuf::Closure* done = google::protobuf::NewCallback(
@@ -91,7 +92,7 @@ void RpcServer::Register(ProtobufServicePtr service)
 		const google::protobuf::MethodDescriptor* methodDescriptor =
 				serviceDescriptor->method(i);
 		std::size_t methodHash = stringHash(methodDescriptor->full_name());
-		MethodInfoPtr methodInfo(new MethodInfo(service, methodDescriptor));
+		MethodInfoPtr methodInfo = boost::make_shared<MethodInfo>(service, methodDescriptor);
 		methods[methodHash] = methodInfo;
 	}
 }

+ 4 - 3
Cpp/Platform/Rpc/RpcServerTest.cc

@@ -2,6 +2,7 @@
 #include <boost/asio.hpp>
 #include <boost/function.hpp>
 #include <boost/threadpool.hpp>
+#include <boost/make_shared.hpp>
 #include <gtest/gtest.h>
 #include <glog/logging.h>
 #include <gflags/gflags.h>
@@ -64,14 +65,14 @@ TEST_F(RpcServerTest, ClientAndServer)
 {
 	boost::threadpool::fifo_pool threadPool(2);
 
-	ProtobufServicePtr echoSevice(new MyEcho);
+	ProtobufServicePtr echoSevice = boost::make_shared<MyEcho>();
 
-	RpcServerPtr server(new RpcServer(ioServer, port));
+	RpcServerPtr server = boost::make_shared<RpcServer>(ioServer, port);
 	// 注册service
 	server->Register(echoSevice);
 	ASSERT_EQ(1U, GetMethodMap(server).size());
 
-	RpcClientPtr client(new RpcClient(ioClient, "127.0.0.1", port));
+	RpcClientPtr client = boost::make_shared<RpcClient>(ioClient, "127.0.0.1", port);
 	EchoService_Stub service(client.get());
 
 	// 定义消息

+ 3 - 2
Cpp/Platform/Rpc/RpcSession.cc

@@ -1,4 +1,5 @@
 #include <boost/bind.hpp>
+#include <boost/make_shared.hpp>
 #include "Rpc/RpcSession.h"
 #include "Rpc/RpcServer.h"
 
@@ -29,8 +30,8 @@ void RpcSession::OnSendMessage(RpcMetaPtr meta, StringPtr message)
 
 void RpcSession::Start()
 {
-	RpcMetaPtr meta(new RpcMeta());
-	StringPtr message(new std::string);
+	RpcMetaPtr meta = boost::make_shared<RpcMeta>();
+	StringPtr message = boost::make_shared<std::string>();
 	RecvMeta(meta, message);
 }