小编Lor*_*156的帖子

为什么g ++允许返回不可复制的类?

我为不可复制的类创建了这个基类:

class non_copyable
{
public:

    non_copyable(const non_copyable&) = delete;
    non_copyable& operator=(const non_copyable&) = delete;

    virtual ~non_copyable() = default;

protected:

    non_copyable() = default;
};
Run Code Online (Sandbox Code Playgroud)

然后我创建了这个派生类:

class manager
    : public non_copyable
{
public:
    manager()
    {
    }

    std::string s;
};
Run Code Online (Sandbox Code Playgroud)

我能够创建一个类的实例并返回如下:

manager get()
{
    return manager();
}
Run Code Online (Sandbox Code Playgroud)

我认为这是不可能的,因为删除了复制构造函数并删除了隐式生成的移动构造函数,因为存在用户定义(已删除)的复制构造函数.

此代码使用MinGW-64 7.2编译,但不与MSVC 2017编译,并产生以下消息:

函数"manager :: operator =(const manager&)throw()"(隐式声明)无法引用 - 它是一个已删除的函数

这是编译器的问题,C++设计允许还是我做错了什么?

c++ g++ visual-c++ c++17

4
推荐指数
2
解决办法
175
查看次数

压缩和解压缩 tar.gz 文件

我正在尝试将目录压缩到tar.gz文件中,并在使用 Rust 后将其解压缩。我正在使用板条箱tar = "0.4.35"flate2 = "1.0.20". 我在 Windows 上。

我的代码与此处的示例几乎相同。

let tar = File::create("a.tar.gz").unwrap();
let enc = GzEncoder::new(tar, Compression::default());
let mut a = tar::Builder::new(enc);
a.append_dir_all("", "in").unwrap();
Run Code Online (Sandbox Code Playgroud)
let tar = File::open("a.tar.gz").unwrap();
let dec = GzDecoder::new(tar);
let mut a = Archive::new(dec);
a.unpack("out").unwrap();
Run Code Online (Sandbox Code Playgroud)

解压时总是报错: thread 'main' panicked at 'called Result::unwrap() on an Errvalue: Custom { kind: InvalidInput, error: TarError { desc: "failed to iterate over archive", io: Custom { kind: InvalidInput, error: "invalid gzip …

gzip tar rust

1
推荐指数
1
解决办法
2320
查看次数

标签 统计

c++ ×1

c++17 ×1

g++ ×1

gzip ×1

rust ×1

tar ×1

visual-c++ ×1