草庐IT

new_elem

全部标签

C++:struct 和 new 关键字

我是C++的初学者,我有以下代码:structAirline{stringName;intdiameter;intweight;};Airline*myPlane=newAirline;我的问题是,如果我没记错的话,当我调用new方法时,它会分配内存。PC如何知道要分配多少内存,特别是考虑到其中有一个字符串类型?谢谢 最佳答案 std::string对象是固定大小的;它包含一个指向实际字符缓冲区的指针及其长度。std::string的定义看起来像classstring{char*buffer;size_tnchars;public:

c++ - "(void) new"在 C++ 中是什么意思?

我一直在看Qttutorial它使用了我以前从未见过的结构:(void)newQShortcut(Qt::Key_Enter,this,SLOT(fire()));(void)newQShortcut(Qt::Key_Return,this,SLOT(fire()));(void)newQShortcut(Qt::CTRL+Qt::Key_Q,this,SLOT(close()));我已经在没有(void)的情况下尝试了这个,它仍然可以编译和工作,那么(void)的目的是什么? 最佳答案 将表达式转换为(void)基本上告诉编译器忽

c++ - 此 C++ 代码是否会导致内存泄漏(强制转换数组 new)

我一直在研究一些使用可变长度结构(TAPI)的遗留C++代码,其中结构大小将取决于可变长度字符串。这些结构是通过转换数组new分配的,因此:STRUCT*pStruct=(STRUCT*)newBYTE[sizeof(STRUCT)+nPaddingSize];不过稍后使用delete调用释放内存:deletepStruct;数组new[]和非数组delete的混合会导致内存泄漏还是取决于编译器?将此代码更改为使用malloc和free会更好吗? 最佳答案 从技术上讲,我认为它可能会导致分配器不匹配的问题,但实际上我不知道有哪个编译

c++ - 为什么我应该/不应该使用 "new"运算符来实例化一个类,为什么?

我知道这可能被解释为“您的偏好是什么”问题之一,但我真的很想知道为什么您会选择以下方法之一。假设您有一个super复杂类,例如:classCDoSomthing{public:CDoSomthing::CDoSomthing(char*sUserName,char*sPassword){//Dosomthing...}CDoSomthing::~CDoSomthing(){//Dosomthing...}};我应该如何在全局函数中声明局部实例?intmain(void){CDoSomthing*pDoSomthing=newCDoSomthing("UserName","Passwor

c# - "Base b = new Derived()"是哪个 OO 概念的一个例子?

我在通过考试时遇到了一个问题,但我的同事未能就此问题达成一致。С++1classBase{};2classDerived:publicBase{};3classFoo4{5public:6Foo()7{-8-Base*b=newDerived();//Conceptnameis?9}10};C#1abstractclassBase{}2publicclassDerived:Base{}34publicclassFoo5{6publicFoo7{-8-Baseb=newDerived();//Conceptnameis?9}10}问题是:上面第8行是下面oo概念的一个例子多态性聚合封装抽

c++ - 当 `new v < new v` 不是模板时,为什么 gcc 拒绝 `v`?

简单的测试用例:#includestructv{};intmain(){std::cout我知道比较指针有一个未指定的结果,但这与这里无关(并且可以通过更多的击键产生类似的例子,如后面的coliru片段)。我手边的C++标准在§14.2第3段中说:Afternamelookupfindsthatanameisatemplate-nameorthatanoperator-function-idoraliteral-operator-idreferstoasetofoverloadedfunctionsanymemberofwhichisafunctiontemplate,ifthisis

c++ - 使用 C++ "operator new"而不是 CoCreateinstance 来创建 COM 对象是否安全?

这可能是一个菜鸟COM问题,但谷歌搜索提出的问题多于提供答案:对本地COM实例使用“operatornew”而不是CoCreateInstance是否安全?我做了什么:我实现了IOperationsProgressDialog接口(interface)http://msdn.microsoft.com/en-us/library/windows/desktop/bb775368(v=vs.85).aspx通过使用公共(public)继承,从而也实现了IUnknown接口(interface)。我通过“newRecyclerProgressCallback”创建了一个实例,并将其放入CO

c++ - new (this) 是什么意思?

我找到了这个代码示例进行研究:T&T::operator=(Tconst&x){if(this!=&x){this->~T();//destroyinplacenew(this)T(x);//constructinplace}return*this;}当我查看thedocumentation时对于new没有采用指针的版本。因此:新(这个)是什么意思?它的用途是什么?文档中没有列出怎么能这样调用呢? 最佳答案 它被称为“placementnew”,您的代码片段中的注释几乎可以解释它:它在括号中指定的地址中构造了一个T类型的对象,但没有

c++ - 如何使用 new 传入构造函数参数

我正在尝试将参数传递给构造函数,但同时创建一个类似的对象数组。我使用以下代码到达那里:PointPtrcentroids=newPoint[k](5);好吧,这不是语法错误,但它没有编译。我真的不想将“5”硬编码到Point的默认构造函数中。对我应该如何执行此操作有任何想法吗?谢谢!顺便说一句,我已经在其他地方做了typedefPoint*PointPtr。如果标题不准确,请见谅。我不知道如何总结这一点。 最佳答案 我建议使用std::vector:std::vectorv(k,Point{5});但你也可以这样做:Point*ce

c++ - new 后面一定要跟着 delete 吗?

这个问题在这里已经有了答案:关闭13年前。我想我们都明白在重新分配动态分配的指针以防止内存泄漏时delete的必要性。但是,我很好奇,C++在多大程度上强制使用delete?比如下面这个程序intmain(){int*arr=newint[5];return0;}虽然出于所有意图和目的,此处不会发生泄漏(因为您的程序正在结束,操作系统将在返回后清理所有内存),但标准是否仍然需要——或推荐——使用delete[]在这种情况下?如果不是,是否还有任何其他原因导致您在此处删除[]?