显示对象时获取垃圾值
Posted
技术标签:
【中文标题】显示对象时获取垃圾值【英文标题】:getting junk value while display object 【发布时间】:2020-07-23 10:35:34 【问题描述】:我正在尝试使用复制和交换习语来实现一个类,但是在打印对象时我得到了垃圾值。在使用分配之前,我正在使用 copy-ctor 来使用副本。以下是代码sn-p:
class EmpTasks
private:
size_t m_size;
char* name;
public:
EmpTasks(char* name, int size = 0)
: m_size(size),
name(m_size ? new char[m_size] : nullptr)
EmpTasks(const EmpTasks& source)
: m_size (source.m_size),
name (source.name ? new char [m_size] : nullptr)
std::copy(source.name, source.name + m_size, name);
//copy assign operator
EmpTasks& operator = (EmpTasks copy_form)
swap(*this, copy_form);
return *this;
friend void swap (EmpTasks& first, EmpTasks& second)
//ADL
using std::swap;
swap(first.m_size, second.m_size);
swap(first.name, second.name);
friend ostream& operator<<(ostream& os, const EmpTasks& ep)
return os << "Employee name: " << ep.name << endl;
~EmpTasks()
delete[] name;
;
这里是主要的sn-p。我做错了什么。
const int size = 14;
char name[size] = "Some string";
EmpTasks ep (name, size);
cout << ep << endl;
【问题讨论】:
你永远不会使用name
参数传递给你的构造函数。
const int size = 8; char name[size] = "Some string";
-- 该字符串文字中的字符数超过 8 个。
【参考方案1】:
发生这种情况是因为您尚未初始化 var name
,因此您可以在 ctor 中使用类似以下内容的内容
EmpTasks(char* name, int size = 0)
: m_size(size),
name( m_size ? new char[m_size] : nullptr )
for(size_t i; i< m_size; ++i)
this -> name[i] = name[i];
另一件事。 name[size] = "Some string";
这里 "Some string"
必须是
我认为您应该考虑以下版本的复制赋值运算符
//copy assign operator
EmpTasks& operator = (const EmpTasks& copy_form)
if(this == & copy_form) return *this;//checks for self-assignment
EmpTasks tempcopy_form;//uses cpy ctor
std::swap(*this, temp);//remember to delete your `swap`
return *this;
因为你的不是复制赋值运算符,因为它的参数不是常量,也不是引用。
请注意,name
与 std::operator<<
等标准库函数一起使用时需要空终止符 '\0'
,因此它的大小应至少为字符数 + 1。
【讨论】:
以上是关于显示对象时获取垃圾值的主要内容,如果未能解决你的问题,请参考以下文章
当您使用 Python 的 Paramiko 库进行 SSH 并从远程机器的 CLI 获取输出时,是不是有一种简单的方法可以消除垃圾值?
当您使用 Python 的 Paramiko 库进行 SSH 并从远程机器的 CLI 获取输出时,是不是有一种简单的方法可以消除垃圾值?
当您使用 Python 的 Paramiko 库进行 SSH 并从远程机器的 CLI 获取输出时,是不是有一种简单的方法可以消除垃圾值?
当您使用 Python 的 Paramiko 库进行 SSH 并从远程机器的 CLI 获取输出时,是不是有一种简单的方法可以消除垃圾值?