显示对象时获取垃圾值

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;

因为你的不是复制赋值运算符,因为它的参数不是常量,也不是引用。

请注意,namestd::operator&lt;&lt; 等标准库函数一起使用时需要空终止符 '\0',因此它的大小应至少为字符数 + 1。

【讨论】:

以上是关于显示对象时获取垃圾值的主要内容,如果未能解决你的问题,请参考以下文章

当您使用 Python 的 Paramiko 库进行 SSH 并从远程机器的 CLI 获取输出时,是不是有一种简单的方法可以消除垃圾值?

当您使用 Python 的 Paramiko 库进行 SSH 并从远程机器的 CLI 获取输出时,是不是有一种简单的方法可以消除垃圾值?

当您使用 Python 的 Paramiko 库进行 SSH 并从远程机器的 CLI 获取输出时,是不是有一种简单的方法可以消除垃圾值?

当您使用 Python 的 Paramiko 库进行 SSH 并从远程机器的 CLI 获取输出时,是不是有一种简单的方法可以消除垃圾值?

从JTable获取对象

unity啥情况下gc不能自动回收垃圾对象