指向存储在堆栈中的变量的指针

时间:2018-02-25 23:36:39

标签: c++

所以基本上我创建了一个存储在堆中的对象(使用new来创建它),这个对象包含一个变量的指针(在这种情况下为Vector3,但无关紧要),它存储在堆栈(使用Vector3(0,0,0)创建)。

我将指针传递给存储在堆栈中的Vector3,如下所示:

CREATE INDEX small_miracle 
    ON `Stations`(`Namespace`, `Lat`, `Lon`);

SELECT 
    Instance,
    Namespace, 
    Stations.Name, 
    Stations.Lat, 
    Stations.Lon, 
    Temp, 
    Humid, 
    TDS.ID AS 'StationID',
    ( 
        6371 
        * acos( 
              cos( radians(44.436292) ) 
            * cos( radians( Stations.Lat ) ) 
            * cos( 
                radians( Stations.Lon ) 
                - radians(26.102452) 
                ) 
            + sin( radians(44.436292) ) 
            * sin(radians(Stations.Lat))
            ) 
        ) AS distance,
    timeTables.Lines AS 'Lines'
FROM `Stations`
INNER JOIN transportData.stations TDS
    ON (
        TDS.Lat = Stations.Lat
        AND TDS.Lon = Stations.Lon
        )
LEFT JOIN (
    SELECT 
        timeTables.Station,
        GROUP_CONCAT(Line SEPARATOR ';') Lines
    FROM transportData.timeTables 
    GROUP BY timeTables.Station
) timeTables
    ON timeTables.Station = TDS.ID 
WHERE 
    `Namespace` LIKE "%8" 
    AND 26.102452 +0.1 > Stations.Lat
    AND 26.102452 -0.1 < Stations.Lat
    AND 44.436292 +0.1 > Stations.Lon
    AND 44.436292 -0.1 < Stations.Lon
    AND distance < 0.1
ORDER BY distance;

e1是另一个指向堆中对象的指针,但我认为这不重要。

所以我假设当我更新位置时(例如e1-&gt; setPosition(something))然后因为我想要保持这个位置的指针的对象有指针而不是位置的副本,它应该自动保存存储在该存储器地址中的新值。

但事实并非如此。我更新了拥有它的对象的位置,但是在我保存指针的其他对象中没有更新它。

可能因为位置存储在堆栈中吗?

感谢您的阅读,对不起,如果您不明白的话。

1 个答案:

答案 0 :(得分:1)

您的getPosition可能正在执行以下操作:

Vector3 getPosition() { return position; }

因此,您将返回位置矢量的副本,因此不是您真正想要的对象。你应该做这样的事情:

Vector3* getPositionPtr() { return &position; }