草庐IT

Binding_New_Objective-C_Types

全部标签

c++ - 在 valgrind 中将 QSharedPointer 与 new[] 一起使用会产生 "Mismatched free()/delete/delete[]"

我有以下代码:QPair,int>someclass::somefunction(){intsiz=data_size();QSharedPointerbuffer(newunsignedint[siz]);//Fillthebuffer...returnqMakePair(buffer,siz);}在某些时候,此函数返回的QSharedPointer将超出范围,构造函数中设置的指针将被释放。使用valgrind3.6.1,出现“不匹配的free()/delete/delete[]”错误。我对QSharedPointer的使用有什么问题吗?还是我只能忍受这个valgrind警告?

c++ - 通过 new 赋值一个复杂的构造函数

我有一个困惑。以下是一段代码。我想使用new创建一个包含五个类对象的动态数组,但我想运行一个循环以使用循环计数器分配构造函数的第一个参数。类似的东西。classA{public:A(int_x,int_y):x(_x),y(_y){}private:intx,y;};intmain(){A*a=newA[5];//compilererrorfor(i=0;i谁能告诉我正确的语法是什么,因为我没有简单的构造函数? 最佳答案 这一行A*a=newA[5];要求A是默认可构造的。因此,一个简单的选择是将默认构造函数添加到A:A():x()

c++ - C/C++ : extract a subset of one enum to form a new enum

假设我有一个列出所有人员的主枚举:typedefenumall_personnel{//maleTONY,MIKE,JIM,//femaleJESSICA,MARY,}all_personnel_t;现在我想为male和female定义其他两个枚举(因为,例如,一些函数只接受males或females枚举参数),但我想使用与主枚举中相同的名称标识符。在C/C++中有可能吗?还是有其他方法?似乎以下内容不起作用(编译器提示redeclarationofenumerator‘TONY’等:typedefenummale_personnel{TONY,MIKE,JIM,}male_perso

c++ - operator new 已经有一个主体

我正在尝试将参数作为全局参数来实现operatornew。如果没有args的new重载没有问题,但是在尝试编译时出现以下错误inlinevoid*operatornew(size_t,void*p){//...returnp;}c:\bjarne_exercise_6.cpp(14):errorC2084:function'void*operatornew(size_t,void*)throw()'alreadyhasabodyc:\programfiles\microsoftvisualstudio10.0\vc\include\new(55):seepreviousdefiniti

c++ - 提升精神 : how to convert basic types?

假设我有一个std::string属性,但为了便于解析,我想使用qi::int_或qi::double_.是否有一种简单的方法可以将转换作为语义操作进行?我试过这样的:std::stringstreamss;my_int_as_str=qi::int_[ref(ss)但这甚至无法编译。编辑-尝试使用下面sehe的回答#include#include#include#includenamespaceqi=boost::spirit::qi;namespacephx=boost::phoenix;intmain(intargc,char*argv[]){std::stringtest="1

c++ - 如果使用 'new' 来实例化对象而不将其分配给变量,会发生什么情况?

想问一下如果我写下面的程序运行程序会怎样newint[5];//withoutassigningittoapointer.编译通过。但是会分配一个5*sizeof(int)内存块吗?如果是对象呢?newsome_obj_[5];//withoutassigningittoapointer.some_obj_的构造函数会被调用吗? 最佳答案 newint[5];//withoutassigningittoapointer.是的,将分配一个5*sizeof(int)内存块,但您无法访问,因为您没有保存指针。你会发生内存泄漏。newsom

c++ - 从 std::tuple<some_types...> 开始创建子元组

让我们假设一个std::tuple给出。我想创建一个新的std::tuple其类型是在[0,sizeof...(some_types)-2]中索引的类型.例如,假设起始元组是std::tuple.我想获得一个定义为std::tuple的子元组.我对可变参数模板很陌生。作为第一步,我尝试写一个struct负责存放不同类型的原件std::tuple目的是创建一个新的同类元组(如std::tuplenew_tuple)。templatestructtype_list;templatestructtype_list:publictype_list{typedefTtype;};template

c++ - std::string 和 placement new

我发现了这个在C++中使用placementnew的例子,它对我来说没有意义。我认为这段代码容易出现异常,因为可能会使用比分配的内存更多的内存。char*buf=newchar[sizeof(string)];string*p=new(buf)string("hi");如果“string”是C++STD::string类,那么buf将得到一个分配空字符串对象的大小(我的编译器给出了28个字节),然后我看到它的方式如果你用更多的字符初始化你的字符串你可能超过分配的内存。例如:string*p=new(buf)string("hiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii

C++ 错误 : deduced conflicting types for parameter 'T' string vs const char *

因此,我正在为双端队列容器编写一个简单的模板化搜索函数。这是代码:templatevoidsearchInDequeFor(std::dequeDeque,TsearchValue){for(constauto&element:Deque){if(Deque.empty()){std::cout下面是我在main中调用函数的方式:dequemyDeque={"apple","banana","pear","blueberry"};searchInDequeFor(myDeque,"pear");这是我遇到的错误:candidatetemplateignored:deducedconfl

c++ - Object var 和 Object* var = new Object() 的区别

如果我有一个名为Object的类,那么创建一个这样的实例有什么区别:Objectvar;和:Object*var=newObject();? 最佳答案 此处您在堆栈上创建了var:Objectvar;所以在上面,var是实际的对象。此处您在堆上创建var(也称为动态分配):Object*var=newObject()在堆上创建对象时,必须在使用完后对其调用delete。此外,var实际上是一个指针,它保存着类型为Object的对象的内存地址。在内存地址存在实际对象。更多信息:Seemyanswerhereonwhatandwhere