[问题] std::list 阵列

楼主: hardware (哈味)   2015-06-03 15:56:53
开发平台(Platform): (Ex: VC++, GCC, Linux, ...)
g++ Linux
程式码(Code):(请善用置底文网页, 记得排版)
#include <iostream>
#include <cstring>
#include <list>
using namespace std;
#define BUFFERSIZE 1024
class receivebuffer_0{
public:
unsigned char *payload;
int NALU;
receivebuffer_0() // Constructor
{
payload = new unsigned char[BUFFERSIZE];
NALU = 0;
}
};
int main() {
list<receivebuffer_0> WiFi;
receivebuffer_0 data;
size_t payloadLength = 100;
unsigned char payloadIndex[payloadLength];
payloadIndex[0] = 254;
payloadIndex[1] = 30;
data.NALU = 1;
cout<< (int)payloadIndex[0]<<endl; // output 254 OK
memcpy(data.payload , payloadIndex, 2);
WiFi.push_back(data);
payloadIndex[0] = 40;
payloadIndex[1] = 45;
data.NALU = 12333;
memcpy(data.payload , payloadIndex, 2);
WiFi.push_back(data);
cout<<(int)WiFi.front().payload[0]<<endl;
//output 40 .... should output 254
cout<<WiFi.front().NALU<<endl; // output 1
WiFi.pop_front();
cout<<(int)WiFi.front().payload[0]<<endl; // output 40
cout<<WiFi.front().NALU<<endl; // output 12333
return 0;
}
补充说明(Supplement):
我应该要如何修正呢?
另外为什么不能
cout<<(int)WiFi.front().payload;
这样不是可以印出 payload这阵列所有元素的值吗?
谢谢
作者: Feis (永远睡不着 @@)   2015-06-03 16:08:00
http://goo.gl/y4QoN1如果你不知道怎么办的话, 把 payload 改成阵列就好FYI: http://ideone.com/a0s6FX此外, 你为什么觉得 cout 可以直接印出阵列的所有值呢除非你打算把它当字串印, 只是他又不是真的字串?
作者: anyoiuo   2015-06-03 16:41:00
问题出在Shallow copy写个copy constructor就好了http://ideone.com/72G1K3
作者: Feis (永远睡不着 @@)   2015-06-03 16:43:00
只写个 copy constructor 可能不够对.
作者: anyoiuo   2015-06-03 16:46:00
默认的copy constructor是Shallow copy,只有字段复制
作者: Feis (永远睡不着 @@)   2015-06-03 16:46:00
请参阅一楼连结. 你还需要实作其他好朋友们才不会有后遗症基本上一个只有 new 没有 delete 的类别是很奇特的
作者: anyoiuo   2015-06-03 16:49:00
恩,我知道move constructor,在当return时会遇到(效能
楼主: hardware (哈味)   2015-06-03 16:49:00
感谢 anyoiuo ~
楼主: hardware (哈味)   2015-06-03 16:50:00
感谢 Feis
作者: anyoiuo   2015-06-03 16:50:00
有new就要有delete,所以要写destructor他忘了吧XD
作者: Feis (永远睡不着 @@)   2015-06-03 16:50:00
我不是这意思. 算了. forget it阿. 我是这意思 (跳针)不过就这个实作来看, payload 需要是指标的意义不明毕竟阵列是固定大小.又没有要作分享. 建议 hardware 再想想

Links booklink

Contact Us: admin [ a t ] ucptt.com