我可以在所述对象的构造函数中创建指向对象的指针吗?

Posted

技术标签:

【中文标题】我可以在所述对象的构造函数中创建指向对象的指针吗?【英文标题】:Can I create a pointer to an object in the constructor of said object? 【发布时间】:2020-06-13 18:42:22 【问题描述】:

目标是每次创建 Car 类的对象时,都会创建该对象的指针并将其放置在“汽车注册表”中。

这就是我所拥有的:

class Car 
private:
    string color = "blah blah";
    string make = "blah blah";
    string model = "blah blah";
public:
    Car(CarRegisterManager* carRegisterManager) 
        // This is where I want to "register" any object of this class with a pointer
        // to reference of this created object inserted into the CarRegisterManager's vector or 
        // registered cars.
        carRegisterManager->registerCar( /*pointer goes here*/ );
    


class CarRegisterManager 
private:
    std::vector<Car> registeredCars_;
public:
    void registerCar(Car* car) 
        registeredCars_.push_back(car);
    


int main() 

     CarRegisterManager carRegisterManager;
     CarRegisterManager* p_carRegisterManager = &carRegisterManager;
     Car hondaCivic1(p_carRegisterManager); // When this is created, I want a pointer to it registered.    


如您所见,我的部分解决方案是在创建 CarRegisterManager 时创建指向管理器对象的指针,以作为参数包含在任何 Car 对象的构造函数中,然后让构造函数对此进行处理。我知道我需要使用“this”之类的东西来表示这个创建的 Car 对象需要为其创建一个指针,然后将该指针放入 CarRegisterManager 的 registerCar 函数中。

我仍在为使用关键字 new 和 this 的概念而苦苦挣扎,如果这确实是我需要在这里使用的话。如果这在其他地方得到回答,我深表歉意。在发布此之前,我合法地搜索了一段时间。我可能没有使用正确的关键术语来设置这些内容。

谢谢。

【问题讨论】:

你说的“指向引用”是什么意思?粗略地说,引用是对象实例的别名。所以指向它的指针与指向被引用对象的指针相同。您不能形成指向引用本身的指针。 @JesperJuhl 抱歉,我误用了我听说过的一个术语。我的意思是我想在所述对象的创建/构造函数中创建一个对象的指针。我已经更新了标题以反映这一点。 【参考方案1】:

您已经知道答案了,因为您在问题中已经说明了:

我知道我需要使用“this”之类的东西来表示这个创建的 Car 对象需要为其创建一个指针,然后将这个指针放入 CarRegisterManager 的 registerCar 函数中。

您可以使用 literal this 指针,例如:

Car(CarRegisterManager* carRegisterManager) 
    carRegisterManager->registerCar(this);

【讨论】:

谢谢你,雷米。感谢您的回复。

以上是关于我可以在所述对象的构造函数中创建指向对象的指针吗?的主要内容,如果未能解决你的问题,请参考以下文章

你能有 2 个相同的 COM 对象吗?

如何在codesys v3中创建指向函数的指针

在 Java 中创建对象数组

JavaScript 原型链学习原型对象

JavaScript中创建对象过程的理解

使用python中的构造函数限制在单例类中创建对象