mar*_*tin 1 c++ arrays destructor vector
问题类似于这个bug
关于在C++中将数组存储在std :: vector中的问题
但出于不同的原因(见下文).
对于C++中的以下示例程序:
#include <vector>
int main(int c_, char ** v_)
{
const int LENGTH = 100;
std::vector<char[LENGTH]> ca_vector;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
GCC 4.2.3编译干净.GCC 4.3.2发出以下错误:
/usr/lib/gcc/i686-pc-linux-gnu/4.3.2/include/g++-v4/bits/stl_construct.h: In function ‘void std::_Destroy(_Tp*) [with _Tp = char [100]]’: /usr/lib/gcc/i686-pc-linux-gnu/4.3.2/include/g++-v4/bits/stl_construct.h:103: instantiated from ‘void std::_Destroy(_ForwardIterator, _ForwardIterator) [with _ForwardIterator = char (*)[100]]’ /usr/lib/gcc/i686-pc-linux-gnu/4.3.2/include/g++-v4/bits/stl_construct.h:128: instantiated from ‘void std::_Destroy(_ForwardIterator, _ForwardIterator, std::allocator&) [with _ForwardIterator = char (*)[100], _Tp = char [100]]’ /usr/lib/gcc/i686-pc-linux-gnu/4.3.2/include/g++-v4/bits/stl_vector.h:300: instantiated from ‘std::vector::~vector() [with _Tp = char [100], _Alloc = std::allocator]’ test.cpp:7: instantiated from here /usr/lib/gcc/i686-pc-linux-gnu/4.3.2/include/g++-v4/bits/stl_construct.h:88: error: request for member ‘~char [100]’ in ‘* __pointer’, which is of non-class type ‘char [100]’
原因显然是这一点
include/g++-v4/bits/stl_construct.h
template
inline void
_Destroy(_Tp* __pointer)
{ __pointer->~_Tp(); }
Run Code Online (Sandbox Code Playgroud)
我认为,由于不正确的数组到指针衰减而被称为.
我的问题是: 语言标准中是否存在阻止std :: vector中存储数组的内容?或者它只是那个特殊GCC版本的错误?
我相信这应该编译(即4.2.3是正确的).
谢谢马丁
是的,标准中有一些东西停止使用数组使用Draft C++ 98 Standard
第23节容器
存储在这些组件中的对象类型必须满足CopyConstructible类型(20.1.3)的要求,以及Assignabletypes的其他要求.
组件是各种容器
20.1.3包括类型必须具有析构函数的要求.
我认为它作为向量必须复制分配和删除元素.C++如何知道复制或删除char []?
| 归档时间: |
|
| 查看次数: |
1837 次 |
| 最近记录: |