簡體   English   中英

我無法將 object 分配給 object 數組

[英]I can't assign an object to an object array

我剛剛編寫了我的第一個復制構造函數和復制運算符,我正在嘗試將一個 object 實例分配給一個數組,如下所示:

Agent agent = Agent(navmesh, rb, m_maxPathSize);
Agent tmp = agent; // DEBUG
m_agents[idx] = agent;

復制構造函數似乎工作正常,因為tmpagent的完美副本(具有新分配的m_path指針)。 但是當我將agent分配給m_agents[idx]時,后者包含我對默認構造函數的期望( m_path == 0m_alive == false )。

我的構造函數如下所示:

Agent() { m_path = 0; m_alive = false; };
Agent::Agent(NavMeshNavigator* navmesh, RigidBody* rb, int maxPathSize)
    : m_rb(rb), m_navmesh(navmesh), m_maxPathCount(maxPathSize)
{
    m_path = new float3[maxPathSize];
};
Agent::Agent(const Agent &a)
{
    memcpy(this, &a, sizeof(Agent));
    if (m_path)
    {
        float3* oldptr = m_path;
        m_path = new float3[m_maxPathCount];
        memcpy(m_path, oldptr, m_maxPathCount * sizeof(float3));
    }
}
Agent& Agent::operator=(const Agent &a) { return Agent(a); }
Agent::~Agent() { if (m_path) delete[] m_path; };

...

protected:
   float3* m_path;
   bool m_alive = true;

構造函數使用new[]m_path分配 memory ,析構函數使用delete[]釋放它,復制運算符調用復制構造函數,並且復制構造函數在分配新的m_path數組之前首先復制原始文件。

在我的測試用例中, idx == 0 ,所以不可能。 我最初使用malloc而不是new[]但得到了相同的結果。 我會說問題出在我的復制構造函數/操作符上,因為我沒有這方面的經驗,但是為什么它在tmp上完美運行?

編輯: m_agents 數組是這樣聲明和銷毀的:

NavMeshAgents(int maxAgents, int maxAgentPathSize)
        : m_maxAgents(maxAgents), m_maxPathSize(maxAgentPathSize)
    {
        m_agents = new Agent[maxAgents];
    };
    ~NavMeshAgents() { if (m_agents) delete[] m_agents; m_agents = 0; };

正如@Evg @HolyBlackCat 和@Adrian-Reinstate-Monica 在評論中解釋的那樣, new[]為其所有成員調用默認構造函數。 Agent tmp = agent調用復制構造函數,而tmp = agent將調用賦值運算符( tmp.operator=(agent) )。 我的賦值運算符錯了,它應該初始化this (然后返回*this而不是返回一個實例。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM