gpt4 book ai didi

c++ - std::make_shared 的奇怪行为

转载 作者:太空宇宙 更新时间:2023-11-03 10:25:36 27 4
gpt4 key购买 nike

我有一个我无法理解的非常奇怪的行为。

此测试通过:

CipString str = *std::make_shared<CipString>("Bye!").get();
EXPECT_EQ(static_cast<std::string>(str), "Bye!");

但这不是:

CipString *str = std::make_shared<CipString>("Bye!").get();
EXPECT_EQ(static_cast<std::string>(*str), "Bye!");

我遇到了一个错误:

Expected: static_cast(*str)

Which is: "p\x15\x97\x1"

To be equal to: "Bye!"

CipString 的代码:

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 */
};

最佳答案

这一行:

CipString *str = std::make_shared<CipString>("Bye!").get();

创建一个在 ; 之后销毁的 shared_ptr。str 之后是一个悬挂指针,您的测试通过访问释放的内存来调用未定义的行为。

你基本上是在断言垃圾内存。

关于c++ - std::make_shared 的奇怪行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36796408/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com