标签: rule-of-five

当使用模板类创建自定义向量时,我应该如何处理析构函数?

我尝试使用模板类创建自定义 Vector 类。

我希望我可以将我的放入变量Vector<int>Vector<Vector<int>>。至少那是我所希望的......但它在析构函数代码处不断崩溃。

这是我的代码。

#include <iostream>
#include <string>

template <typename T>
class Vector {

    T* data;
    int capacity;
    int length;

public:

    typedef T value_type;

    Vector() {}

    Vector(int n) : data(new T[n]), capacity(n), length(0) {}

    void push_back(T input) { 
        data[length++] = input;
    }

    T operator[](int i) { return data[i]; }

    virtual ~Vector() { if (data) delete[] data; }
};

int main() {
    Vector<Vector<int>> v(3);
    Vector<int> vv(4);
    v.push_back(vv);
}
Run Code Online (Sandbox Code Playgroud)

所以我想,也许我应该使用复制构造函数,因为问题似乎是v之前被删除了vv。好吧,如果我只是注释掉析构函数代码,它就会起作用,但这对我来说似乎不对......

所以我做了一个自定义的复制构造函数,如下所示:

Vector(const T& …
Run Code Online (Sandbox Code Playgroud)

c++ containers destructor vector rule-of-five

2
推荐指数
2
解决办法
93
查看次数

这是五规则(或四规则和 1/2)的正确实施吗?

我正在研究五法则及其近亲(四法则和 1/2、复制和交换习语、朋友交换函数)。

我在测试课上实施了四和 1/2 规则。它编译得很好。我的实现中是否存在任何隐藏的错误?

我特别关注存储在m_unoreredd_map属性中的 unique_ptrs,我将其移动到复制构造函数中,因为它们无法复制。这是处理类中 unique_ptr 的正确方法吗?

某个类.h

#ifndef SOMECLASS_H
#define SOMECLASS_H

#include "someotherclass.h"

#include <QString>
#include <QStringList>

#include <memory>
#include <string>
#include <unordered_map>

class SomeClass
{
    QString m_qstring;
    std::unordered_map<std::string, std::unique_ptr<SomeOtherClass>> m_unordered_map;
    int m_int;
    std::string m_string;
    QStringList m_qstringlist;

public:
    SomeClass() = default;

    // Rule of 5 (or Rule of 4 and 1/2)
    // From https://stackoverflow.com/questions/3279543/what-is-the-copy-and-swap-idiom#3279550
    ~SomeClass() = default;                               // Destructor
    SomeClass(SomeClass &other);                          // Copy constructor
    SomeClass(SomeClass &&other);                         // Move constructor
    SomeClass &operator=(SomeClass other);                // Copy/Move assignment …
Run Code Online (Sandbox Code Playgroud)

c++ qt unordered-map rule-of-five

0
推荐指数
1
解决办法
310
查看次数

标签 统计

c++ ×2

rule-of-five ×2

containers ×1

destructor ×1

qt ×1

unordered-map ×1

vector ×1