File .h:

```
class A{
    public:
    TStringList &tsl;
    A(TStringList &arg) : tsl(arg) {}
}
void foo(A& dto);

```

File cpp:

```
void foo(A& dto);
{
     dto.tsl.String[0] = "AAA";
}

```

Use:

```
     TStringList *a= new TStringList();
     ......(some code )......
     A dtoArg=A(*a);
     a.String[0]="BBB";
     foo(dtoArg); 
  Printf("first element now is %s",a.String[0] );

```

Even if the project compiles and all seems fine at runtime, the behavior is not the expected one. The output is `BBB` and not `AAA` as expected. This means that the `TStrngList` is passed by value and not by reference.

So, how to pass the `TString` list by reference. I won't copy the `TSringList` when it is passed to function `foo()`.