为不指向C ++

时间:2018-03-08 21:04:16

标签: c++ pointers

我有一些看起来像这样的代码:

class MyClass
{
 void doSomething(std::string& stringvar) {
   // Does something
}}
class AnotherClass
{ /* Some data structure */ }

然后在主程序中,程序员调用

MyClass* Class1;
std::string myString = "something";
AnotherClass* SecondClass; 
SecondClass = (*Class1).doSomething(myString);

我的问题是,这是做什么的,因为我定义的指针指向什么都没有,然后设置它的值?它为什么设置值?随机内存插槽?在哪里?在堆栈还是堆?为什么有人创建一个类只是为了写一个做某事的函数?我不太了解MyClass类,doSomething实际上是否可能填充某些数据结构?如果是,那么它是如何以及在哪里它也是一个指向什么的指针?

2 个答案:

答案 0 :(得分:4)

正如你所说的那样,这是未定义的行为。这意味着任何事情都可以发生。 可能发生的事情的一个就像程序员想要的那样工作。如果doSomething是非虚函数,并且不访问任何类(非静态)成员变量,则特别有可能。

这仍然是未定义的行为。一旦你改变完全不相关的东西,它就会停止工作。

如果我的诊断是正确的,解决方案是使doSomething成为静态成员函数,并将其调用为:

    secondVar = MyClass::doSomething(mystring);

答案 1 :(得分:3)

  

我定义的指针指向什么,然后设置它的值?它为什么设置值?随机内存插槽?在哪里?在堆栈或堆中?

嗯,相当。没有答案。从字面上看,结果是不确定的。它could向我的右眼发射电磁脉冲。

  

为什么有人创建一个类只是为了写一个能做某事的函数?

存在无能。

  

我真的不了解MyClass类,doSomething是否可能实际上填充了某些数据结构?

这是可能的,但我们不能在没有看到它的情况下告诉你。

  

如果是,那么如果它也是指向什么的指针的方式和位置?

有些人认为他们可以通过狡猾的指针调用成员函数,只要他们不使用任何成员变量,因为“它对我有用”。

那些人错了。该程序有不确定的行为。

我曾经和那些习惯性地使用静态成员函数的人一起工作,因为他们不知道你可以(应该)写Class1::doSomething(myString)代替!