尝试从内存中删除字符串。不会让我分配给cin
Trying to delete string from memory. Won't let me assign to cin
#include "stdafx.h"
#include "Cfriend.h"
int _tmain(int argc, _TCHAR* argv[])
{
std::string * TempName = new std::string;
std::cout << "Name your friend:n";
std::getline (std::cin, TempName);
Cfriend * MyFriend = new Cfriend();
return 0;
}
嗨,我是新来的。我试图创建一个简单的过程,玩家可以将名称分配给Cfriend
,但问题是,它不会让我将cin
分配给TempName
。我希望能够从内存中删除TempName
一旦我完成了它。
问题是您正在尝试使用std::string*
,而std::string
是预期的。
最好的解决方案是不要使用new
来创建每个对象,c++不是Java或c#。
#include "Cfriend.h"
int main(int argc, char* argv[])
{
std::string tempName;
std::cout << "Name your friend:n";
std::getline (std::cin, tempName);
Cfriend myFriend;
return 0;
}
我希望能够从内存中删除
TempName
一旦我完成了它。
为什么?名字会有几千字节长吗?
如果必须销毁它,则让std::string
析构函数销毁它:
#include "Cfriend.h"
int main(int argc, char* argv[])
{
Cfriend myFriend;
{
std::string tempName;
std::cout << "Name your friend:n";
std::getline (std::cin, tempName);
myFriend.setName(tempName);
}
return 0;
}
tempName
在右括号处超出作用域,其内存被释放。
如果真的,真的不能像这样重新排列代码,你仍然可以强制string
释放它拥有的内存:
std::string tempName;
// ...
tempName.clear();
tempName.shrink_to_fit();
当每个评论者都明确地告诉你停止使用new
时,这应该是一个相当大的提示,重新评估你对编写好的c++的假设。
对于TempString
的销毁,它一旦离开作用域就会被销毁。
意味着你可以这样写:
int main()
{
// Some code...
{
std::string temp;
std::getline(std::cin, temp);
// Do something with the string `temp`
}
// No `temp` string object, it doesn't exist, and has been destructed
// More code...
}
这里最大的问题是为什么要呢?除非您希望在一行中有几兆字节的输入文本,否则临时变量的作用域实际上是没有用的。如果您想重新声明temp
(或TempString
)变量,为什么要这样做呢?只需重用现有的变量。
TempName有一个指向字符串的指针。当使用它时,尝试在它前面添加一个*来解引用:
getline(std::cin, *TempName);
或者你也可以直接使用字符串而不是指向它的指针:
int main()
{
std::string myString;
std::getline(std::cin, myString);
// Do something with the string you just read
}
相关文章:
- 将数组的地址分配给变量并删除
- vector.resize()中的分配错误
- 如果C++类在类方法中具有动态分配,但没有构造函数/析构函数或任何非静态成员,那么它仍然是POD类型吗
- Win32编译器选项和内存分配
- 函数中堆分配的效果与缺少堆分配的情况
- C++中的cin.ignore()函数不适用于整个流
- 使用动态分配的数组会导致代码分析发出虚假的C6386缓冲区溢出警告
- 多个文件的内存分配错误"在抛出 'std :: bad_alloc' what (): std :: bad_alloc 的实例后终止调用" [C++]
- 获取字符串的长度并将其分配给数组
- 在while循环中输入带有std::cin的字符串后,控制台会输出大量胡言乱语
- Problems with std::cin.fail()
- 将地址分配给本地指针后,公共对象的变量将消失
- 递归模板化函数不能分配给具有常量限定类型"const tt &"的变量"state"
- 有没有一种方法可以使用placement new将堆叠对象分配给分配的内存
- 我在二维向量中是否正确分配了内存
- 正在尝试重载二进制搜索树分配运算符
- GlobalAlloc而不是其他分配方法
- 使用分配构造字符串时是否可以使用 cin?
- C 初始化一个变量并使用std :: cin分配
- 为什么cin.getline分配给字符数组,但使用'='不会?