提问者:小点点

static_assert失败,因为值类型对于 std::vector 是可破坏的


我有一个非常简单的程序。不知道为什么static_assert(is_destructible

<source>:16:12:   required from here
/opt/compiler-explorer/gcc-8.1.0/include/c++/8.1.0/bits/stl_construct.h:133:21: error: static assertion failed: value type is destructible
       static_assert(is_destructible<_Value_type>::value,

以下是实施:

#include <iostream>
#include <vector>

using namespace std;

class MovieData {
    MovieData(){}
    ~MovieData(){}
};

typedef vector<MovieData> Movies;

int main()
{   
    
    Movies result; // Line 16
    return 0;
}

如果析构函数被注释为< code>// ~MovieData(){},程序将进行编译。有人能解释一下为什么我的析构函数会引起问题吗?


共2个答案

匿名用户

static_assert失败,因为值类型对于 std::vector 是可破坏的

不,断言失败,因为值类型不可销毁。

有些人曾经可以解释为什么析构函数会导致问题吗?

如果声明私有析构函数,则该类不可破坏(在类的成员函数之外)。如果要将类的实例存储在向量中,请不要声明私有析构函数。

如果析构函数被注释 // ~MovieData(){} 程序编译。

这是修复程序的好方法。

匿名用户

问题是你的类析构函数是< code >私有的(默认情况下,所有声明的类成员都是私有的)。添加< code>public:行应该没有问题:

class MovieData {
public:
    MovieData(){}
    ~MovieData(){}
};