Ich habe ein sehr seltsames Verhalten, das ich nicht verstehen kann.Merkwürdiges Verhalten von std :: make_shared
Dieser Test bestanden:
CipString str = *std::make_shared<CipString>("Bye!").get();
EXPECT_EQ(static_cast<std::string>(str), "Bye!");
Aber das ist nicht:
CipString *str = std::make_shared<CipString>("Bye!").get();
EXPECT_EQ(static_cast<std::string>(*str), "Bye!");
ich einen Fehler bekam:
Expected: static_cast(*str)
Which is: "p\x15\x97\x1"
To be equal to: "Bye!"
Die CipString Code:
class CipString{
public:
CipString(const std::string& str) {
length = str.size();
string.reset(new uint8_t[length]);
std::copy(str.begin(), str.end(), string.get());
}
operator std::string() const {
std::string str("", length);
std::copy(string.get(), string.get() + length, str.begin());
return str;
}
uint16_t length; /**< Length of the String (16 bit value) */
std::shared_ptr<uint8_t> string; /**< Pointer to the string data */
};
undefiniertes Verhalten, da Sie baumelnden Zeiger überall haben. –