小编fli*_*ack的帖子

std :: make_shared的奇怪行为

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

该测试通过:

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

但这不是:

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

我收到一个错误:

预期:static_cast(*str)

这是:"p\x15\x97\x1"

等于:"再见!"

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 */
};
Run Code Online (Sandbox Code Playgroud)

c++ shared-ptr c++11

1
推荐指数
1
解决办法
203
查看次数

标签 统计

c++ ×1

c++11 ×1

shared-ptr ×1