在C++中,delete用在赋值语句中,有这种用法吗?

Qt中多层次类之间的信号传递简便方法。其中:
TransmitSignals(const TransmitSignals &) = delete ;
TransmitSignals(const TransmitSignals &&) = delete;
TransmitSignals &operator=(const TransmitSignals &) = delete;

在编译时这3条语句出错。delete能用于赋值语句吗?

delete 是用于 避免编译器 生成默认的,有可能你的编译器不支持

不知道你这个问题是否已经解决, 如果还没有解决的话:
  • 这有个类似的问题, 你可以参考下: https://ask.csdn.net/questions/823559
  • 你也可以参考下这篇文章:C++中delete指针后将指针置0的作用
  • 除此之外, 这篇博客: C/C++动态分配内存的几种方法中的 delete 部分也许能够解决你的问题, 你可以仔细阅读以下内容或者直接跳转源博客中阅读:

      new申请的内存块不被释放,也会造成内存泄露,C++主要使用delete来释放new申请的内存。delete用于释放new申请的单个元素分配的内存,delete[]用于释放new []申请的多个元素分配的内存,具体使用方法见上述程序。注意:使用delete释放的是内存块,而不是s这个指针变量,释放完后,s就变为随机值了,如果在接下来的程序中,没有给s赋新值就再调用s,由于s在内存中是随机值,就有可能指向重要地址,以致使系统崩溃,稳妥起见,如果delete之后程序还没结束,就将s的值赋为NULL。

  • 您还可以看一下 邵发老师的《C语言/C++学习指南》语法篇(从入门到精通)课程中的 new与delete申请内存小节, 巩固相关知识点
  • 以下回答来自chatgpt:

    delete操作符在C++中用于释放通过new操作符动态分配的内存。它不能直接在赋值语句中使用。如果在赋值语句中使用delete操作符,将会导致编译错误。

    对于赋值语句,应该使用赋值操作符(=)来将一个对象的值赋给另一个对象。如果想要释放对象的内存,应该使用delete操作符来释放通过new操作符动态分配的内存。

    以下是一个示例代码,解释了在赋值语句中使用delete操作符的错误和正确用法:

    #include <iostream>
    
    class MyClass {
    public:
        MyClass(int x) : value(x) {
            std::cout << "MyClass constructor: " << value << std::endl;
        }
    
        ~MyClass() {
            std::cout << "MyClass destructor: " << value << std::endl;
        }
    
        int getValue() {
            return value;
        }
    
    private:
        int value;
    };
    
    int main() {
        MyClass* obj1 = new MyClass(1);
        MyClass* obj2 = new MyClass(2);
    
        // 错误的用法:在赋值语句中使用delete操作符
        obj1 = obj2; // 编译错误,无法将指针赋值给另一个指针
    
        // 正确的用法:释放通过new操作符动态分配的内存
        delete obj1;
        delete obj2;
    
        return 0;
    }
    

    这里有两个MyClass类型的对象,分别为obj1和obj2。首先,我们将obj1指向一个值为1的MyClass对象,将obj2指向一个值为2的MyClass对象。

    在错误的用法中,我们尝试将obj2赋值给obj1,这是错误的。因为在C++中,指针赋值操作只是将指针的指向改变,并不会释放原来的内存。

    在正确的用法中,我们使用delete操作符来释放通过new操作符动态分配的内存。首先,释放obj1指向的内存,然后释放obj2指向的内存。

    在运行此代码时,可以看到MyClass对象的构造函数和析构函数的输出。可以注意到,析构函数在delete操作符被调用后被触发,用于释放对象的内存。

    总结:在C++中,delete操作符不能用于赋值语句中。如果想要释放通过new操作符动态分配的内存,应该使用delete操作符来释放内存。


如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^