设计,具有单独的内存分配,未初始化,然后就地初始化、复制或移动。在C++编程语言中,查看19.4个分配器,第三个版本,StruouTrpU.只是点必须是代码>删除[]/Cord>,不是删除>代码>。您可以使用STD::复制而不是MeMCPY“您能建议我的信

设计,具有单独的内存分配,未初始化,然后就地初始化、复制或移动。在C++编程语言中,查看19.4个分配器,第三个版本,StruouTrpU.只是点必须是代码>删除[]/Cord>,不是删除>代码>。您可以使用STD::复制而不是MeMCPY“您能建议我的信,c++,performance,stl,memcpy,C++,Performance,Stl,Memcpy,设计,具有单独的内存分配,未初始化,然后就地初始化、复制或移动。在C++编程语言中,查看19.4个分配器,第三个版本,StruouTrpU.只是点必须是代码>删除[]/Cord>,不是删除>代码>。您可以使用STD::复制而不是MeMCPY“您能建议我的信息源,在那里实现STL容器的深度描述”?我做了一些改变。@Stephane Rolland,如果我使用std::copy,我将比我的方法更具优势???重点是必须delete[],而不是delete。你可以使用std::copy而不是memcpy



设计,具有单独的内存分配,未初始化,然后就地初始化、复制或移动。在C++编程语言中,查看19.4个分配器,第三个版本,StruouTrpU.

只是点必须是代码>删除[]/Cord>,不是<代码>删除>代码>。您可以使用STD::复制而不是MeMCPY“您能建议我的信息源,在那里实现STL容器的深度描述”?我做了一些改变。@Stephane Rolland,如果我使用std::copy,我将比我的方法更具优势???重点是必须
delete[]
,而不是
delete
。你可以使用std::copy而不是memcpy“你能告诉我一个关于STL容器实现的详细信息源吗”@hmjd谢谢,我做了一些更改。@Stephane Rolland如果我使用std::copy,我将比我的方法更具优势???因此,如果看看你的示例:字符串容器,就会发现我的方法在处理以指针/引用作为成员的对象时失败。memcopy允许我执行浅拷贝而不是深度拷贝的原因。复制是否执行深度复制以及如何执行(通过调用复制构造函数或移动复制构造函数)?因为C++的标准STD::复制是可接受的。如果比较循环和std::copy哪个更有效(适合使用)?@spin_八:std::copy调用赋值运算符,而不是复制构造函数。您的对象已由
new[]
构造。最快的方法是什么?你不会认为你的循环和std::copy之间有太大的区别<对于C++11中的复杂对象,code>std::vector将要快得多。std::copy可以(如果实现选择这样做的话)解析为对普通(POD)对象的memcpy调用(或类似的调用)。所以在很多地方它也是正确的选择性能明智。@spin_八:你把“(适合使用)”放在“更高效”之后是一个很大的错误。效率很好,但您主要关心的是工作,干净的代码。在代码运行之前,没有人关心它的效率。如果你只是为了清洁而编码,大多数效率问题都会自行解决。不要再担心了。@GManNickG我同意你的看法,在一个项目中,“适合使用”可能比“效率”更重要(特别是在C++中),因此这可能会让你花更多的时间并更多地关注问题领域(正确的设计…)。但我的目标是训练我的大脑尝试实现一些有效的东西,然后将结果与已经实现的东西进行比较,所以我这样做只是为了教育目的。因此,如果看一下你的例子:字符串容器,它表明我的方法在处理以指针/引用为成员的对象时失败。memcopy允许我执行浅拷贝而不是深度拷贝的原因。复制是否执行深度复制以及如何执行(通过调用复制构造函数或移动复制构造函数)?因为C++的标准STD::复制是可接受的。如果比较循环和std::copy哪个更有效(适合使用)?@spin_八:std::copy调用赋值运算符,而不是复制构造函数。您的对象已由
new[]
构造。最快的方法是什么?你不会认为你的循环和std::copy之间有太大的区别<对于C++11中的复杂对象,code>std::vector将要快得多。std::copy可以(如果实现选择这样做的话)解析为对普通(POD)对象的memcpy调用(或类似的调用)。所以在很多地方它也是正确的选择性能明智。@spin_八:你把“(适合使用)”放在“更高效”之后是一个很大的错误。效率很好,但您主要关心的是工作,干净的代码。在代码运行之前,没有人关心它的效率。如果你只是为了清洁而编码,大多数效率问题都会自行解决。不要再担心了。@GManNickG我同意你的看法,在一个项目中,“适合使用”可能比“效率”更重要(特别是在C++中),因此这可能会让你花更多的时间并更多地关注问题领域(正确的设计…)。但我的目标是训练我的大脑,尝试实施一些有效的东西,然后将结果与已经实施的东西进行比较,所以我这样做只是为了教育目的。是的,谢谢你,我得到了一个很好的答案,几乎解决了我所有的问题。由于我不打算只对内置数据类型使用MyVector,我意识到memcpy将是一个糟糕的想法。谢谢,我得到了一个很好的答案,解决了我几乎所有的问题。因为我不打算只对内置数据类型使用MyVector,所以我意识到memcpy将是一个坏主意
template <typename T>
void MyVector<T>::reserve(int elements) 
{
    if (m_size >= elements) // when no need to reserve memory as at least demanded amount of memory has been already allocated
        return;
    m_capacity = elements;
    tmp = m_array;
    // allocate needed amout of memory:
    m_array = new T[elements];
    // copy elements ???? can I use memcpy????
    for (int i = 0; i < m_size; ++i)
    {
        m_array[i] = tmp[i];
    }
    delete tmp;
}

template <typename T>
void MyVector<T>::reserve1(int elements) 
{
    if (m_size >= elements) // when no need to reserve memory as at least demanded amount of memory has been already allocated
        return;
    m_capacity = elements;
    tmp = m_array;
    // allocate needed amout of memory:
    m_array = new T[elements];
    // copy elements ???? can I use memcpy????
    memcpy(m_array, tmp, m_size);
    delete [] tmp;
}
class Blah
{
    Blah()
    {
        some_function(this);
    }
};

MyVector<Blah> v;

...