相关疑难解决方法(0)

make_unique和完美的转发

为什么std::make_unique标准C++ 11库中没有函数模板?我发现

std::unique_ptr<SomeUserDefinedType> p(new SomeUserDefinedType(1, 2, 3));
Run Code Online (Sandbox Code Playgroud)

有点冗长.以下不是更好吗?

auto p = std::make_unique<SomeUserDefinedType>(1, 2, 3);
Run Code Online (Sandbox Code Playgroud)

这隐藏得new很好,只提到一次类型.

无论如何,这是我尝试实现make_unique:

template<typename T, typename... Args>
std::unique_ptr<T> make_unique(Args&&... args)
{
    return std::unique_ptr<T>(new T(std::forward<Args>(args)...));
}
Run Code Online (Sandbox Code Playgroud)

我花了很std::forward长时间来编译这些东西,但我不确定它是否正确.是吗?究竟是什么std::forward<Args>(args)...意思?编译器对此做了什么?

c++ unique-ptr variadic-templates perfect-forwarding c++11

215
推荐指数
6
解决办法
7万
查看次数

对于std字符串数组,哪种数据结构更好

我需要一个如下结构:

图1

该结构必须保持固定大小std::strings,以使其元素的数量为finit(100-10000000).

我希望能够随机访问每个元素,如下所示:

std::string Temp = MyStrcuture[i];
Run Code Online (Sandbox Code Playgroud)

要么

MyStrcuture[i] = std::string Temp;
Run Code Online (Sandbox Code Playgroud)

我必须选择没有(可能)内存泄漏的最快结构.

哪一个对我更好?

  1. std::string* MyStrcuture = new std::string[Nu_of_Elements];
  2. std::queue< std:string> MyStrcuture(Nu_of_Elements);
  3. std::vector< std:string> MyStrcuture(Nu_of_Elements);
  4. boost::circular_buffer< std::string> MyStrcuture(Nu_of_Elements);
  5. 你的建议?

c++ string queue data-structures

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

C++内存泄漏修复

我的一个伙伴告诉我,我的代码中有内存泄漏

Base
{
    public:
        vector<Foo*> fooes;
};

Derived : public Base
{
    public:

        Derived ( )
        {
            for ( int i = 0 ; i < 10 ; i++ )
            {
                    this.fooes.push_back ( new Foo() );
            }
        };

};
Run Code Online (Sandbox Code Playgroud)

但他是一个非常忙碌的人,他无法帮助我,所以我问你,内存泄漏在哪里?我该如何解决?据我了解,内存泄漏是我不删除创建的对象new Foo(),所以我只能添加一个析构函数Base,并清除fooes向量,对吧?

Base
{
    public:
        vector<Foo*> fooes;
        ~Base ( )
        {
            this->fooes.clear();
        };

};
Run Code Online (Sandbox Code Playgroud)

问题是:

  1. 这是正确的内存泄漏修复吗?

  2. 会的析构函数Base的派生,或不析构函数之前被调用?

  3. 请问fooesvertor被自动删除,同时删除Base或我必须手动删除类的所有成员?

c++ memory memory-leaks derived-class

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