我应该实现右值推送功能,应该使用std :: move吗?

问题描述 投票:0回答:1

作为练习,我正在C ++ 11中实现一个堆栈类。这是相关代码:

template <class T>
class stack
{
private:
    T * elements;
    std::size_t capacity;
    std::size_t count;

public:
    explicit stack(std::size_t capacity) : capacity(capacity)
    {
        elements = new T[capacity];
    };

    ~stack()
    {
        delete[] elements;
    };

    void push(const T & t)
    {
        if (capacity > count)
        {
            elements[count++] = t;
        }
    }

    void push(T && t)
    {
        if (capacity > count)
        {
            elements[count++] = std::move(t);
        }
    }
};

我正在使用以下类:

stack<std::string> stack_test(2);
stack_test.push("string1");

std::string string2 = "string2";
stack_test.push(string2);

按预期,第一次推送使用push(T && t),而第二次推送使用push(const T&t)

我应该实施右值推送吗?我应该在其中使用std :: move()吗?

c++ c++11 move-semantics rvalue-reference
1个回答
0
投票

鉴于您同时在两个t中都存储了push,则可以具有一个

© www.soinside.com 2019 - 2024. All rights reserved.