C++字符串无法读取内存
C++ String Unable to Read Memory
我有一个类,如下所示:
class ModelCommand {
public:
virtual ~ModelCommand() {};
};
class FolderCommand : public ModelCommand {
public:
std::string text;
unsigned width;
bool isBackspace;
FolderCommand(bool isBackspace, unsigned width, std::string text = "") : text(text), width(width), isBackspace(isBackspace) {}
};
class CModel {
private:
string _folder;
public:
void Update(std::shared_ptr<ModelCommand> &cmd);
};
然后在我的控制器中,我有一个模型的实例,并使用我创建的新FolderCommand对象更新它:
shared_ptr<CModel> model;
shared_ptr<ModelCommand> cmd = dynamic_pointer_cast<ModelCommand>(make_shared<FolderCommand>(false, 20, "a"));
model->Update(cmd);
然后在我的CModel更新方法中,我尝试做以下操作:
void CModel::Update(std::shared_ptr<ModelCommand> &cmd) {
if (auto folderCmd = dynamic_pointer_cast<FolderCommand>(cmd)) {
if(!folderCmd->isBackspace)
// This is where _folder is unable to read memory
_folder += folderCmd->text;
else if(folderCmd->isBackspace && _folder.length() > 0)
_folder.erase(--_folder.end());
folderCmd->text = _folder;
}
}
这导致CModel的_folder变量为"无法读取内存"。
有人能解释并提供这个问题的解决方案吗?
谢谢。
更新添加了更多用于澄清的代码
使用您发布的第一个片段,我调用了如下的Update方法,没有出现"无法读取内存"的问题。
int main()
{
shared_ptr<ModelCommand> fc(new FolderCommand("somestring\"));
CModel mod;
mod.Update(fc);
mod.print_folder();
return 0;
}
我想看看Update方法是如何使用的会很有趣。
Obs.:我添加了一个公共成员函数print_folder,用于打印_folder私有成员。此外,我只想发表一点评论,但我仍然没有这个特权。
相关文章:
- 我可以在没有任何锁的情况下从不同的线程读取内存缓冲区吗?
- SAP Netweaver.C++ 错误:无法读取内存
- c++ 结构指针在初始化为 NULL 时无法读取内存
- GDB Python模块读取内存内容
- 内存池和<无法读取内存>
- 读取内存值(实时)最佳实践
- C++无法读取内存地址
- 构造函数问题<无法读取内存>
- C 螺纹池具有共享仅读取内存
- C++ 读取内存地址/指针和偏移量
- C++字符串无法读取内存
- 调用函数时,c++无法使用自定义类读取内存
- 无法读取内存以删除对象数组
- ConstantStruct或ConstantArray读取内存内容
- 如何在可视C++中读取内存地址
- C++:从注入的DLL读取内存的好方法是什么?
- C++ 对象的实例无法读取内存
- <无法读取内存> c++
- 内核驱动程序读取内存未发送整个字符串
- 在C++中嵌入 Python 的错误:无法读取内存