由买买提看人间百态

boards

本页内容为未名空间相应帖子的节选和存档,一周内的贴子最多显示50字,超过一周显示500字 访问原贴
Programming版 - 我是否需要Move(C++11)?
相关主题
C++ ASIO异步一问c++ 弱问题:static const char* const 这两个const 分别是什么意思?
C++类的静态函数对成员函数问个a=b 的问题
C++11痛并快乐着[合集] 为什么很少有人用static来实现signleton?
请教一个C++概念。c++ singleton questions
static 变量放在哪里?C++[合集] C问题求助:如何强行从外部访问local static variable?
C++ 全局变量是怎么回事?perl里如何申明static变量?
问个C++编译器如何处理函数内的static 变量请问关于c++实现singleton的问题?
c++ 不自动initialize变量么?Visual C++ 高手帮忙,一个Link Error
相关话题的讨论汇总
话题: tcpserver话题: eth0话题: endpoint话题: 变量话题: static
进入Programming版参与讨论
1 (共1页)
b***i
发帖数: 3043
1
有一个类,TCPServer{
public: TCPServer(asio::io_service& io_service, const tcp::endpoint& listen_
endpoint){...}
private:
asio::io_service& io_service_;
asio::ip::tcp::acceptor acceptor_;
TCPListener listener_;
};
这个类是boost的一个例子。我的代码需要三个变量,放在TCPServerManager里面,为
简单起见,我定义三个static变量。
TCPServerManager{
static TCPServer eth0, eth1, wifi;
static void start(){...}
};
那么,在start里面,我根据boost的例子,用TCPServer s(io_service, listen_
endpoint);定义了一个变量。怎么把这个变量变成我的eth0,eth1, wifi呢?
在定义eth0的那个地方,需要的listen_endpoint还没有好,就是说,需要后续的代码
(start)来完成listen_endpoint的赋值。
我是否需要eth0=std::move(s); 那样,我自己写TCPServer的move assignment怎么写
呢?虽然一共三个变量,还是需要请教懂行的。
另外,我是否可以使用TCPServer *eth0=new TCPServer(.) 这样可以在start函数里
面执行。算是另外一种方法吧。
l*********s
发帖数: 5409
2
你这不能static吧
k****e
发帖数: 2758
3
文科生?

listen_

【在 b***i 的大作中提到】
: 有一个类,TCPServer{
: public: TCPServer(asio::io_service& io_service, const tcp::endpoint& listen_
: endpoint){...}
: private:
: asio::io_service& io_service_;
: asio::ip::tcp::acceptor acceptor_;
: TCPListener listener_;
: };
: 这个类是boost的一个例子。我的代码需要三个变量,放在TCPServerManager里面,为
: 简单起见,我定义三个static变量。

B*******g
发帖数: 1593
4
能不能从heap move到static我不确定, 但你这个s不是rvalue, compiler不会让move吧
? 你的三个变量不能直接初始化吗? 为什么一定要从另一个变量copy/move?
又看了下, 应该可以写move constructor和move assignment operator

listen_

【在 b***i 的大作中提到】
: 有一个类,TCPServer{
: public: TCPServer(asio::io_service& io_service, const tcp::endpoint& listen_
: endpoint){...}
: private:
: asio::io_service& io_service_;
: asio::ip::tcp::acceptor acceptor_;
: TCPListener listener_;
: };
: 这个类是boost的一个例子。我的代码需要三个变量,放在TCPServerManager里面,为
: 简单起见,我定义三个static变量。

b***i
发帖数: 3043
5
程序运行中途,要修改某个IP地址,或者port
比如,系统有三个以太网:eth0, eth1, wifi, 只有eth0的地址和端口是固定的,其
他的由应用程序通过和客户的交流来设定。如果客户要改,这个变量就要重新赋值。
更改就发生在handle_read里面,例子:如果包的内容是: set eth1 ip=...... port =
....
那么这里就呼叫对应的函数来关掉相应的eth1的io_service,然后用新的IP地址和端口
重新生成新的。

【在 B*******g 的大作中提到】
: 能不能从heap move到static我不确定, 但你这个s不是rvalue, compiler不会让move吧
: ? 你的三个变量不能直接初始化吗? 为什么一定要从另一个变量copy/move?
: 又看了下, 应该可以写move constructor和move assignment operator
:
: listen_

n**n
发帖数: 626
6
1) Can we use TCPServer* eth0 instead of TCPServer eth0? then maybe we can
create and record heap memory object in start() after "listen_endpoint". I
don't see the need of keeping a TCPServer object inside.
2) Why should we use static member TCPServer eth0 here? Are there many
TCPServerManager objects?
l*********s
发帖数: 5409
7
because there is no pointer in java. : -)

【在 n**n 的大作中提到】
: 1) Can we use TCPServer* eth0 instead of TCPServer eth0? then maybe we can
: create and record heap memory object in start() after "listen_endpoint". I
: don't see the need of keeping a TCPServer object inside.
: 2) Why should we use static member TCPServer eth0 here? Are there many
: TCPServerManager objects?

n**n
发帖数: 626
8
oh, isn't the title saying c++11?

【在 l*********s 的大作中提到】
: because there is no pointer in java. : -)
b***i
发帖数: 3043
9
用指针可以,我现在就这么用的。不是为了新潮吗?
为什么是静态变量,是因为这个系统一共一个TCPServerManager,负责管理所有的
server变量。所以,是个singleton。当然,我可以用singleton那一套,不过直接
static也行吧?不行就不是静态变量的,但是通过getInstance()来访问。

【在 n**n 的大作中提到】
: 1) Can we use TCPServer* eth0 instead of TCPServer eth0? then maybe we can
: create and record heap memory object in start() after "listen_endpoint". I
: don't see the need of keeping a TCPServer object inside.
: 2) Why should we use static member TCPServer eth0 here? Are there many
: TCPServerManager objects?

n**n
发帖数: 626
10
I don't quite understand the relation between singleton manager object
and static member variables.
singleton of manager class is usually implemented using a getServer() method
, while static member variable is more like a global variable under a class
name.
btw, I never see such 新潮.
[在 bihai (学得不好) 的大作中提到:]
:有一个类,TCPServer{
:public: TCPServer(asio::io_service& io_service, const tcp::endpoint&
listen_endpoint){...}
:...........
b***i
发帖数: 3043
11
前面有人说了heap到static不可行。这个可能是个问题。而我开始问的其实是从stack
到static。估计也不行。
所以,取决于io_service的实现,如果所有内部的变量都在heap上,可以简单的转移,
自己写个move constructor。如果都在stack上,就不可以吧。
用singleton我想就把变量放在heap上了。不过,还是不能从stack到heap。

method
class

【在 n**n 的大作中提到】
: I don't quite understand the relation between singleton manager object
: and static member variables.
: singleton of manager class is usually implemented using a getServer() method
: , while static member variable is more like a global variable under a class
: name.
: btw, I never see such 新潮.
: [在 bihai (学得不好) 的大作中提到:]
: :有一个类,TCPServer{
: :public: TCPServer(asio::io_service& io_service, const tcp::endpoint&
: listen_endpoint){...}

1 (共1页)
进入Programming版参与讨论
相关主题
Visual C++ 高手帮忙,一个Link Errorstatic 变量放在哪里?C++
请教一个C++的设计问题C++ 全局变量是怎么回事?
请教高手一个C++问题问个C++编译器如何处理函数内的static 变量
Java网上触发,同步数据库问题c++ 不自动initialize变量么?
C++ ASIO异步一问c++ 弱问题:static const char* const 这两个const 分别是什么意思?
C++类的静态函数对成员函数问个a=b 的问题
C++11痛并快乐着[合集] 为什么很少有人用static来实现signleton?
请教一个C++概念。c++ singleton questions
相关话题的讨论汇总
话题: tcpserver话题: eth0话题: endpoint话题: 变量话题: static