复制构造函数 / 动态数组 / delete_scalar.cpp错误

Copy Constructor / Dynamic Array / delete_scalar.cpp Error

提问人:Wikallou 提问时间:11/10/2022 更新时间:11/10/2022 访问量:131

问:

我创建了一个程序,它输入一个整数的动态数组。我想添加一个复制构造函数,以便更好地了解其功能,但是总是在尝试运行程序时,Visual Studio 打开一个新选项卡并获得错误,所以如果有人遇到类似的问题,它会帮助我。delete_scalar.cpp

代码如下:

DynamicArray.h

#pragma once
class DynamicArray
{
private:
    int* arr;
    int capacity;
    int number_of_elements;
public:
    DynamicArray(int capacity = 1);
    DynamicArray(const DynamicArray&);
    ~DynamicArray();
    void add(DynamicArray* arr, int value);
    void print(DynamicArray* arr);
};

DynamicArray.cpp

#include "DynamicArray.h"
#include <iostream>

DynamicArray::DynamicArray(int capacity): capacity(capacity),number_of_elements(0),arr(new int[capacity])
{}
DynamicArray::~DynamicArray()
{
    delete[] this->arr;
    this->arr = nullptr;
    this->number_of_elements = 0;
    this->capacity = 0;
}
DynamicArray::DynamicArray(const DynamicArray& other) : capacity(other.capacity),number_of_elements(other.number_of_elements),arr(new int[other.number_of_elements])
{
    
    for (int i = 0; i < number_of_elements; i++)
    {
        this->arr[i] = other.arr[i];
    }

}

main.cpp

int main()
{  
        DynamicArray obj(5);
    DynamicArray obj2(5);
    obj.add(&obj,22);
    obj.add(&obj,12);
    obj.add(&obj,18);
    obj.add(&obj,11);
    obj.print(&obj);
    obj2=obj;
    obj2.print(&obj2);
}

错误delete_scalar.cpp

_CRT_SECURITYCRITICAL_ATTRIBUTE
void __CRTDECL operator delete(void* const block) noexcept
{
    #ifdef _DEBUG
    _free_dbg(block, _UNKNOWN_BLOCK);
    #else
    free(block);
    #endif
}

提前致谢!

此致敬意!

C++ 复制构造函数

评论

1赞 john 11/10/2022
问题就在这里.这不是一个复制构造函数,而是一个赋值运算符。由于您尚未编写赋值运算符,因此会出现崩溃。如果你想测试你的复制构造函数,请写这样的东西obj2=obj;DynamicArray obj3(obj);
0赞 Neil Butterworth 11/10/2022
您正在执行作业而不是复制构造
0赞 Pepijn Kramer 11/10/2022
代码中也不应该需要。对于内存大小,您应该使用 std::size_t 而不是 int。这将避免分配负内存大小的问题,并提供足够的位来存储大量数据。this->
0赞 Daniel Langr 11/10/2022
OT:请注意,重置析构函数中成员变量的值是无用的。当对象的生命周期即将结束时,为什么要为其赋值?
0赞 463035818_is_not_an_ai 11/10/2022
有点相关:stackoverflow.com/questions/4172722/what-is-the-rule-of-three/......

答: 暂无答案