草庐IT

new_size

全部标签

c++ - 从 std::size_t* 到 long unsigned int* 的无效转换

在raspberrypi-arv7l上,我正在编译以下C++程序#includevoidfun(unsignedlongint*i){std::cout对于上面的代码,我收到以下错误:a.cpp:Infunction'intmain()':a.cpp:12:9:error:invalidconversionfrom'std::size_t*{akaunsignedint*}'to'longunsignedint*'[-fpermissive]fun(&i);^~a.cpp:3:6:note:initializingargument1of'voidfun(longunsignedint*

c++ 构造函数与 new

我犯了一个非常愚蠢的错误,只是将指向一些新内存的指针包装在一个简单的类中。classMatrix{public:Matrix(intw,inth):width(w),height(h){data=newunsignedchar[width*height];}~Matrix(){deletedata;}Matrix&Matrix::operator=(constMatrix&p){width=p.width;height=p.height;data=p.data;return*this;}intwidth,height;unsignedchar*data;}.........//main

c++ - 检测 "new"项目何时被删除

这个问题在这里已经有了答案:HowcanIdetermineifaC++objecthasbeendeallocated?(6个答案)关闭4年前。考虑这个程序:intmain(){structtest{test(){coutSpeak();system("pause");}我原以为会发生崩溃,但实际上却发生了:HelloGoodbyeIsay!我猜这是因为当内存被标记为释放时,它并没有被物理删除,而且由于代码直接引用它,对象仍然在那里,完好无损。在调用Speak()之前进行的分配越多,发生崩溃的可能性就越大。无论出于何种原因,这对我的实际线程代码来说都是一个问题。鉴于上述情况,我如何可

c++ - char *p_c = new char ['1' , '2' , '3' , '4' ]; 的含义

考虑char*p_c=newchar['1','2','3','4'];这个语法正确吗?如果是,那么它有什么作用?我不知道为什么,但是编译器允许这种语法!它对内存有什么影响?我无法通过*p_c访问变量。如何确定存在的元素的大小和数量? 最佳答案 你的代码在语法上是有效的C++,虽然有点奇怪,但我认为它没有达到你的预期:newchar['1','2','3','4']被评估为newchar['4']由于方式逗号运算符有效。(前面的元素是从左到右计算的,但表达式的值是最右边元素的值。)所以你的语句等同于char*p_c=newchar[

c++ - 如何实现具有 placement new 和 emplace 功能的简单容器?

我需要实现一个容器来容纳一定数量的元素,出于某种原因,它必须在没有任何堆分配的情况下工作。另一个要求是,不应以任何方式复制或移动容器元素。它们必须直接构造到容器分配的内存中。为此,我决定使用placementnew并将内存管理完全委托(delegate)给容器实现(在drdobbs找到了一些关于placementnew的有用信息)。找到一个正在运行的例子here.(请注意,使用newuint8_t[size]和std::queue只是为了让示例保持简单。我的真实代码更复杂,无堆而不是实现。)到目前为止,这非常有效,因为客户端代码必须通过以下调用将元素放入容器中:executer.pus

c++ - C++中new和delete的使用

我需要帮助来理解何时应该使用以下选项char*a=newchar();和char*a=newchar[sizeof(int)+1];以及应该如何进行相应的内存释放调用? 最佳答案 任何时候你使用newT,之后你必须在结果指针上调用delete。任何时候你使用newT[n],你都必须在之后对结果指针调用delete[]。这就是它的全部内容。但请注意,您通常根本不应该使用它们。如果你需要一个字符串,不要分配一个字符数组。只需声明一个std::string(不使用new)。如果您需要一个大小在运行时确定的数组,请不要分配数组。声明一个st

c++ - 使用malloc代替new,创建对象时调用拷贝构造函数

我想试用TBB的scalable_allocator,但是当我不得不替换我的一些代码时感到困惑。这是使用分配器完成分配的方式:SomeClass*s=scalable_allocator().allocate(sizeof(SomeClass));编辑:上面显示的不是使用scalable_allocator完成分配的方式。作为ymettcorrectlymentioned,分配是这样完成的:intnumberOfObjectsToAllocateFor=1;SomeClass*s=scalable_allocator().allocate(numberOfObjectsToAlloca

c++ - 返回空指针的用户定义的 operator new

我知道那里有相当多的C++常见问题解答(以及关于SO的答案)说没有必要检查普通new表达式的返回值是否为null,因为普通new表达式通过抛出异常来指示失败。他们基本上声明普通的new表达式永远不会返回null。(“普通新表达式”是指不是nothrow的新表达式)。然而,尽管这看起来像是一个非常基本的问题,但我突然意识到我不明白他们在给出答案时所做的具体假设(如果有的话)。特别是,我想知道是否允许我重载::operatornew的基本普通形式以始终返回空指针,因此期望所有使用该运算符的普通new表达式都将现在也返回空指针。根据语言规范,如果我的::operatornew被声明为非抛出,

c++ - 对未知大小数组的引用的列表初始化 : is it supposed to deduce the array size?

以下代码在Clang中编译良好并输出int[3]数组的大小#includeintmain(){constint(&a)[]={1,2,3};std::cout但是,在GCC中,声明编译得很好,但是sizeofa没有:显然GCC拒绝“推断”数组大小并以a作为结尾对constint[]类型的引用,该类型不完整。此类初始化的预期行为是什么?9.3.4/3似乎是此类情况下标准的相关部分,但它本身似乎并不能最终回答这个问题。 最佳答案 标准在这一点上并不完全清楚,我认为GCC的解释很可能是WG21的意图,但我不确定。标准的相关部分是[dcl.

c++ - std::list 中的 max_size() 函数如何计算最大尺寸?

在std::list中,max_size()函数中的最大大小是如何计算的?现在我意识到这取决于实现,但假设我是制作标准库的人。我将如何确定可移植的特定类型T的list的最大限制? 最佳答案 它几乎总是N的最大值,其中容器最多可以有N个元素。这几乎总是意味着所讨论平台上无符号整数类型的最大值除以要存储在容器中的元素类型的大小。 关于c++-std::list中的max_size()函数如何计算最大尺寸?,我们在StackOverflow上找到一个类似的问题: h