标签: delete-operator

删除[]一个对象数组

我已分配和对象数组

Objects *array = new Objects[N];
Run Code Online (Sandbox Code Playgroud)

我该如何删除这个数组?只是

delete[] array;
Run Code Online (Sandbox Code Playgroud)

或者迭代数组的元素?

for(int i=0;i<N;i++)
    delete array[i];
delete[];
Run Code Online (Sandbox Code Playgroud)

谢谢

更新:

我改变了循环体

delete &array[i];
Run Code Online (Sandbox Code Playgroud)

强制代码编译.

c++ arrays new-operator delete-operator

31
推荐指数
5
解决办法
9万
查看次数

删除指向指针的指针(作为数组的数组)

我的代码中有这个:

double** desc = new double* [size_out];
for (int i = 0; i < size_out; i++)
    desc[i] = new double [size_in];
Run Code Online (Sandbox Code Playgroud)

我该如何删除desc

我应该这样做:

delete [] desc;
Run Code Online (Sandbox Code Playgroud)

要么

for (int i=0; i<size_out; i++)
    delete [] desc[i];
delete [] desc;
Run Code Online (Sandbox Code Playgroud)

要么

for (int i=0; i<size_out; i++)
    delete [] desc[i];
delete desc;
Run Code Online (Sandbox Code Playgroud)

c++ pointers delete-operator

30
推荐指数
5
解决办法
3万
查看次数

为什么在C++中没有放置删除表达式?

为什么C++没有直接对应于贴图新的贴片删除,即调用析构函数并调用适当的贴片删除操作符?

例如:

MyType *p = new(arena) MyType;
...
//current technique
p->~MyType();
operator delete(p, arena);

//proposed technique
delete(arena) p;
Run Code Online (Sandbox Code Playgroud)

c++ new-operator delete-operator c++11

30
推荐指数
4
解决办法
1万
查看次数

为什么我的程序在递增指针然后删除它时会崩溃?

当我意识到我对指针有很大的误解时,我正在解决一些编程练习.请有人解释一下这段代码导致C++崩溃的原因.

#include <iostream>

int main()
{
    int* someInts = new int[5];

    someInts[0] = 1; 
    someInts[1] = 1;

    std::cout << *someInts;
    someInts++; //This line causes program to crash 

    delete[] someInts;
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

PS我知道没有理由在这里使用"new",我只是尽可能地使用这个例子.

c++ pointers dynamic-memory-allocation delete-operator

30
推荐指数
4
解决办法
4905
查看次数

什么相当于C中的C++新/删除?

什么相当于C中的C++新/删除?

或者它在C/C++中是一样的?

c c++ new-operator delete-operator

27
推荐指数
3
解决办法
6万
查看次数

在C++中删除malloc的行为

int *p=(int * )malloc(sizeof(int));

delete p;
Run Code Online (Sandbox Code Playgroud)

当我们使用malloc分配内存时,我们应该使用free释放它,当我们在C++中使用new分配时,我们应该使用delete释放它.

但是如果我们使用malloc分配内存然后使用delete,那么应该会有一些错误.但是在上面的代码中,C++中没有错误或警告.

此外,如果我们使用new进行反向和分配并使用free进行释放,那么也没有错误或警告.

为什么会这样?

c++ malloc delete-operator

27
推荐指数
3
解决办法
2万
查看次数

在删除具有重载删除的对象之前进行NULL检查

这是代码审查评论之一.

在为任何对象调用delete之前检查NULL是个好主意吗?

我确实理解删除运算符在内部检查NULL并且是多余的,但是提出的参数是删除,因为运算符可以重载,如果重载版本没有检查NULL,它可能会崩溃.因此,假设如果和何时删除将被重载,它是否安全合理,它将检查是否为NULL?在我的理解中,合理地假设第一种情况是重载删除应该处理NULL检查,并且审查点不成立.你怎么看?

c++ null delete-operator

26
推荐指数
4
解决办法
4473
查看次数

在构造函数中"删除此"

我执行此代码时实际发生了什么?

class MyClass
{
    MyClass()
    {
        //do something
        delete this;   
    }
}
Run Code Online (Sandbox Code Playgroud)

c++ constructor destructor self-destruction delete-operator

26
推荐指数
1
解决办法
8243
查看次数

删除不完整类型的对象

这个让我想到:

class X;

void foo(X* p)
{
    delete p;
}
Run Code Online (Sandbox Code Playgroud)

delete p如果我们甚至不知道是否X有可见的析构函数,我们怎么可能呢?g ++ 4.5.1给出了三个警告:

warning: possible problem detected in invocation of delete operator:
warning: 'p' has incomplete type
warning: forward declaration of 'struct X'
Run Code Online (Sandbox Code Playgroud)

然后它说:

注意:即使在定义类时声明析构函数也不会调用析构函数或特定于类的运算符delete.

哇......像g ++一样诊断这种情况需要编译器吗?还是未定义的行为?

c++ pointers forward-declaration delete-operator incomplete-type

25
推荐指数
2
解决办法
1万
查看次数

如果我删除一个类,它的成员变量是否会自动删除?

我一直在研究,没有任何相关的问题,所以我来到这里.

我试图避免内存泄漏,所以我想知道:

假设我有一个MyClass成员ints ab一个类int array c,它们填充了一个成员函数:

class MyClass
{
    public:
        int a, b;
        int c[2];
        void setVariables() 
        {
            a, b = 0;
            for (int i = 0; i < 2; i++) 
            {
                c[i] = 3;
            }
        }
};
int main(int argc, char* argv[])
{
    MyClass* mc = new MyClass();
    mc->setVariables();
    delete mc;
} 
Run Code Online (Sandbox Code Playgroud)

现在,我打电话后delete mc,会a,b以及所有的内容c被删除?或者我必须在析构函数中明确地做到这一点MyClass

c++ variables class member delete-operator

25
推荐指数
5
解决办法
3万
查看次数