C++ データベース アクセス APIMsgPack
用に作成しているカスタム バックエンドの一部として使用しています。当初、一部のクラスにはメンバー変数としてオブジェクトがありましたが、オブジェクトのデストラクタでいくつかの問題に遭遇しました。この問題は、参照がそのオブジェクトの一部をカウントする方法と、複数解放されるオブジェクトの基礎となるメモリに関連していると思います回。SOCI
SOCI
MsgPack::sbuffer
SOCI
SOCI
MsgPack
この問題を解決するために、MsgPack::sbuffer
メンバー変数をメンバー変数に置き換え、これらを使用してメソッドを使用して s をstd::vector<char>
埋めることにしました。残念ながら、これにも問題があります。MsgPack::sbuffer
pack_raw_body
次の(疑似)コードスニペットを検討してください...
msgpack::sbuffer buf1;
msgpack::packer<msgpack::sbuffer> bufPkr1(&buf1);
bufPkr1.pack_array(num);
for (int ndx = 0; ndx < num; ++ndx) {
bufPkr1.pack_array(3);
bufPkr1.pack(std::string("foo"));
bufPkr1.pack(std::string("bar"));
bufPrk1.pack(221);
}
std::vector<char> chrVct = std::vector<char>(buf1.size(), *buf1.data());
msgpack::unpacked unPkd1;
msgpack::unpack(&unPkd1, buf1.data(), buf1.size());
msgpack::object toStr1 = unPkd1.get();
std::cout << "MsgPack1: " << toStr1 << std::endl;
msgpack::sbuffer buf2;
msgpack::packer<msgpack::sbuffer> bufPkr2(&buf2);
bufPkr1.pack_raw(chrVct.size());
bufPkr1.pack_raw_body(chrVct.data(), chrVct.size());
msgpack::unpacked unPkd2;
msgpack::unpack(&unPkd2, buf2.data(), buf2.size());
msgpack::object toStr2 = unPkd2.get();
std::cout << "MsgPack2: " << toStr2 << std::endl;
出力...
MsgPack1: [["foo", "bar", 221], ["foo", "bar", 221], ["foo", "bar", 221],..., ["foo", "bar", 221]]
MsgPack2: ""
一般に、MsgPack オブジェクトの操作方法を理解するのに苦労しているだけで、ドキュメントや例が少しまばらです。人々が提供できるどんな助けも大歓迎です!