为什么我们不在下面给出的代码中使用指针来实例化C++的实体对象?
Why we are not using a pointer in instantiating the entity object in the code given below of C++?
在此代码的主函数中,这是什么意思(ScopedPtr ent = new Entity((( 为什么我们不按照C++实例化样式使用 (ScopedPtr*(
#include<iostream>
#include<string>
class Entity
{
public:
Entity()
{
std::cout << "Created Entity!" << std::endl;
}
void Print()
{
std::cout << "Print" << std::endl;
}
};
class ScopedPtr
{
private:
Entity* m_Ptr;
public:
ScopedPtr( Entity* ptr)
: m_Ptr(ptr)
{}
/*ScopedPtr()
{
std::cout << "Hello";
}*/
~ScopedPtr()
{
std::cout << "Deleted Pointer";
delete m_Ptr;
}
};
int main()
{
{
ScopedPtr ent = new Entity();
}
std::cin.get();
}
以及为什么 ScopedPtr(实体构造函数(没有采用 Entity* 参数并且代码成功运行。
ScopedPtr ent = new Entity();
右侧是类型Entity*
的值,而不考虑详细信息。 所以它可以写成
Entity* t = new Entity(); // doesn't matter what it's = to, just note its type.
ScopedPtr ent = t;
现在您有一个变量定义T x = y;
其中y
不属于T
类型。 因此,它隐式转换为正确的类型,这确实是
ScopedPtr ent = ScopedPtr(t);
这里的=
是初始化而不是赋值,因此ent
是用(转换的(右侧初始化的。
为什么我们不按照C++实例化风格使用
(ScopedPtr*)
因为创建对象不需要new
。ScopedPtr
的全部意义在于将具有动态存储持续时间("在堆上"(的对象生存期与具有自动存储持续时间("在堆栈上"(的另一个对象的生存期联系起来。
相关文章:
- 为什么我们不在下面给出的代码中使用指针来实例化C++的实体对象?
- 为什么我不能引用指向实例化对象的函数的指针?
- 是否可以将指向未实例化的对象的指针用作C++中的变量?
- 为什么在使用指针时不采用类成员的默认值,而不是直接实例化对象时?
- 为共享指针C++单独实例化对象
- 为什么不能在实例化对基类的引用的同时实例化指向派生类的指针?
- 模板类实例化中的指针转换无效
- 实例化一个模板类,该类采用具有不同函数签名的构造函数中的函数指针
- 为什么当我在构造函数中创建线程时,实例化对象和对象的指针的行为不同
- make_pair并push_back基指针,并实例化基指针的向量
- 声明基类类型的指针,但随后通过指向子类来实例化它.这是良好的编程实践吗?
- 使用派生类实例化基类,而不在对象定义中使用指针
- (C++)用于实例化新对象并将其分配给指向相同对象类型的指针的 2D 向量的语法
- C 实例化对象,在没有指针的情况下,其他类构造函数中没有默认构造函数
- 用push_back()实例化对象时,如何将指针传递给对象的构造函数
- 如何在 C++ 中的构造函数中正确实例化指针数组
- 使用指针实例化模板类
- 为什么可以从实例化基类对象的投射指针调用非静态派生类方法
- 当我创建一个int指针并实例化一个数组时,数组在内存中发生了什么
- 如何使用智能指针实例化对象