为什么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)...
意思?编译器对此做了什么?
我需要一个如下结构:
该结构必须保持固定大小std::string
s,以使其元素的数量为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)
我必须选择没有(可能)内存泄漏的最快结构.
哪一个对我更好?
std::string* MyStrcuture = new std::string[Nu_of_Elements];
std::queue< std:string> MyStrcuture(Nu_of_Elements);
std::vector< std:string> MyStrcuture(Nu_of_Elements);
boost::circular_buffer< std::string> MyStrcuture(Nu_of_Elements);
我的一个伙伴告诉我,我的代码中有内存泄漏
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)
问题是:
这是正确的内存泄漏修复吗?
会的析构函数Base
的派生,或不析构函数之前被调用?
请问fooes
vertor被自动删除,同时删除Base
或我必须手动删除类的所有成员?