Want to protect your cyber security and still get fast solutions? Ask a secure question today.Go Premium

x
  • Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 150
  • Last Modified:

qoy (i do not have that many points :-)

Could a private constructor be useful for a Delphi object? Describe a constallation.
What is the problem of Delphi 5 (maybe also 4 and 6) with a private constructor?

100 points for an answer to both parts. 50 for one part.
No sample code required. A good explanation is enough.
Maybe more points for a good description.
0
robert_marquardt
Asked:
robert_marquardt
  • 4
  • 3
  • 3
1 Solution
 
kretzschmarCommented:
qoy->question of the year?

never used a private constructor,
no idea whats thebenefit of of ths

listening . . .

meikl ;-)
0
 
robert_marquardtAuthor Commented:
To precise the question: ONLY a private constructor!
Yes, it IS useful.
0
 
geobulCommented:
Hi,
Nice question, Robert.

I've never used it before but made some tests. And the tests show that:
1. if the object is created in the same unit then the private constructor is executed.
2. if the object is created outside its unit then the inherited constructor is used instead.

So, the conclusion:
A private constructor could be useful for an object which is used by another object in the same unit to perform some special operations (initialization) which are specific to that second (master) object and are not mandatory when the first object is used by itself.

Is that clear enough (understandable)? Does that make sense?

Regards, Geo
0
Concerto Cloud for Software Providers & ISVs

Can Concerto Cloud Services help you focus on evolving your application offerings, while delivering the best cloud experience to your customers? From DevOps to revenue models and customer support, the answer is yes!

Learn how Concerto can help you.

 
geobulCommented:
About your second question: I can't find out any problems using private constructors in Delphi 5. What did you have in mind?
0
 
robert_marquardtAuthor Commented:
geobul, almost there.
1. not bad, but i have a more useful task implemented already
2. you mentioned the problem, but failed to recognize it.
0
 
robert_marquardtAuthor Commented:
I will solve the question tomorrow.
0
 
kretzschmarCommented:
yep, do it :-)
0
 
robert_marquardtAuthor Commented:
I use a private constructor as geobul mentioned. A controller object (component) creates them. The objects itself represent USB devices. No user interference is needed because the devices are plugged and as reaction a device object is created. A user/program created object is not advisable here because a 1 : 1 representation is always needed. For that i wanted to make it impossible to create a device object.

The problem is mentioned by geobul as 2. The TObject.Create is not hidden because it is a static method not a virtual method.
This i consider as a language problem. Visibility clashes with inheritance.
Locally the private constructor hides the TObject.Create. Externally TObject.Create is still visible.
I also get no visibility warning like for virtual methods. So the most difficult to understand language part is completely unvocered by hints or warnings.

I will award geobul the 100 points. Maybe more. It was a really tricky question.
0
 
kretzschmarCommented:
aplause ;-)
0
 
geobulCommented:
Wow, so many many thanks, Robert :-)))

I see what you had in mind now. On the one hand that is some kind of flexibility but on the other hand the lack of warning messages is really bad. This may lead to very-hard-to-find errors.

Thank you again and best regards, Geo
0

Featured Post

What does it mean to be "Always On"?

Is your cloud always on? With an Always On cloud you won't have to worry about downtime for maintenance or software application code updates, ensuring that your bottom line isn't affected.

  • 4
  • 3
  • 3
Tackle projects and never again get stuck behind a technical roadblock.
Join Now