C++ 指针类型是指向“的唯一方法吗?”;防止;在声明中调用构造函数?

C++ 指针类型是指向“的唯一方法吗?”;防止;在声明中调用构造函数?,c++,pointers,C++,Pointers,我试图寻找这个,但我没有找到任何答案。让我们看看这个: class Foo { Foo(); Bar a; // 'a', the object, gets created (even if I don't want to!) Bar* b; // 'b', the pointer, gets created, but the object doesn't } Foo::Foo() { a = a(); // I'd like to create 'a' her

我试图寻找这个,但我没有找到任何答案。让我们看看这个:

class Foo
{
    Foo();
    Bar a; // 'a', the object, gets created (even if I don't want to!)
    Bar* b; // 'b', the pointer, gets created, but the object doesn't
}

Foo::Foo()
{
    a = a(); // I'd like to create 'a' here instead. This just "replaces" it
    b = new Bar(); // 'b', the object, gets created
}
我的问题是:我可以在不创建对象的情况下声明它吗?还是我总是要用指针

我的问题是:我可以在不创建对象的情况下声明它吗

没有

还是我总是要用指针

不,指针是一种选择。还有其他一些,例如
boost::optional
std::optional
也在标准化过程中)。还有智能指针(
std::unique_ptr
std::shared_ptr
)。一个标准的c++11之前版本的选项是
std::vector
,它比原始指针更容易管理,在这里您只添加一个元素

但是你确定你需要这个吗

我的问题是:我可以在不创建对象的情况下声明它吗

没有

还是我总是要用指针

不,指针是一种选择。还有其他一些,例如
boost::optional
std::optional
也在标准化过程中)。还有智能指针(
std::unique_ptr
std::shared_ptr
)。一个标准的c++11之前版本的选项是
std::vector
,它比原始指针更容易管理,在这里您只添加一个元素


但是你确定你需要这个吗?

你为什么想要?你想实现什么?你为什么想要?你想达到什么目的?我其实什么都不需要它,因为我一直在使用指针类型,在一些场景中,我需要一个对象包含成员变量,例如,必须按特定顺序创建成员变量。我只是在想这个。来自Java和C#的世界,声明一个对象也会初始化它,这让人感觉很反直觉。谢谢你的回答。我真的什么都不需要它,因为我一直在使用指针类型,在一些场景中,我需要一个对象具有成员变量,例如,必须按特定顺序创建。我只是在想这个。来自Java和C#的世界,声明一个对象也会初始化它,这让人感觉很反直觉。谢谢你的回答。