gpt4 book ai didi

c++ - 在 STL 容器中处理智能指针

转载 作者:行者123 更新时间:2023-11-30 02:06:52 24 4
gpt4 key购买 nike

我有一节课Foo<T>它有一个指向 Shape 的智能指针 vector 派生类。我正在尝试实现 at(index)成员函数。这是我凭直觉要做的事情:

Foo<float> myfoo;
std::unique_ptr<Shape<float>> shape_ptr = myfoo.at(i);
shape_ptr->doSomething(param1, param2, ...);

定义 at(index) 时函数,我收到一条编译器错误消息。请注意,移动构造函数已定义,并且 Shape 基类是抽象的。下面,我给出了一些代码用于说明目的。

此外,我最近在网上找到了一个关于如何使用 std::move 重载赋值运算符的示例。 .我通常遵循 Copy-Swap 惯用语。这两种重载上述运算符的方法中的哪一种对我的情况有意义?下面,我还说明了函数的定义。

template < typename T >
class Foo{

public:

Foo();
Foo( Foo && );
~Foo();

void swap(Foo<T> &);
//Foo<T> & operator =( Foo<T> );
Foo<T> & operator =( Foo<T> && );

std::unique_ptr<Shape<T> > at ( int ) const; // error here!

int size() const;

private:

std::vector< std::unique_ptr<Shape<T> > > m_Bank;
};

template < typename T >
Foo<T>::Foo( Foo && other)
:m_Bank(std::move(other.m_Bank))
{

}

/*template < typename T >
void Filterbank<T>::swap(Filterbank<T> & refBank ){

using std::swap;
swap(m_Bank, refBank.m_Bank);
}

template < typename T >
Foo<T> & Filterbank<T>::operator =( Foo<T> bank ){

bank.swap(*this);
return (*this);
}*/

template < typename T >
Foo<T> & Foo<T>::operator =( Foo<T> && bank ){

//bank.swap(*this);
m_Bank = std::move(bank.m_Bank);
return (*this);
}

template < typename T >
std::unique_ptr<Shape<T> > Foo<T>::at( int index ) const{
return m_Bank[index]; // Error here! => error C2248: 'std::unique_ptr<_Ty>::unique_ptr' : cannot access private member declared in class 'std::unique_ptr<_Ty>'
}

最佳答案

使用Boost's pointer containers而不是带有 unique_ptr 的标准容器。它们专为此类用途而设计。

关于c++ - 在 STL 容器中处理智能指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8479938/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com